2013-07-04 3 views
1

На моем сайте, я бы переименовать URL на адресную строку, изRewrite URL .htaccess - сервер Apache

domain.com/economy/article.php?id=00 

в

domain.com/economy/id-name-article.html 

Я написал этот файл .htaccess:

RewriteEngine On 
RewriteRule ^([0-9]+)-([^\.]*)\.html$ http://domain.com/economy/article.php?id=$1 [L] 

У меня есть якорь с этим href: href="economy/id-name-article.html", и когда я нажимаю на него, сервер перенаправляется на article.php, он запускает сценарий правильно, и я могу просмотреть статью, но на адресной строке все еще написано domain.com/economy/article.php?id=00 вместо domain.com/economy/id-name-article.html. Зачем?

Это происходит только на моем онлайн-сервере, в то время как локально все в порядке.

ответ

1

Модуль mod_rewrite отправляет вам переадресацию на ваш браузер, вместо того, чтобы прозрачно переписывать URL-адрес, заставляя вас видеть новый URL-адрес в вашем браузере.

Попробуйте удалить http://domain.com часть из вашего RewriteRule, чтобы увидеть, если он избегает редирект браузера, изменив правило:

RewriteRule ^([0-9]+)-([^\.]*)\.html$ /economy/article.php?id=$1 [L] 

Если это не удается, вы можете также использовать флаг прокси [P] на заставить apache прозрачно извлекать страницу и возвращать ее пользователям без перенаправления. Я не рекомендую этот подход, так как он может иметь последствия для безопасности, но он должен работать, если выше не существует.

EDIT: Для того, чтобы уточнить, переписывание URL с полностью доменным, а не относительной URI говорит Apache, что редирект на другой сервере, и поэтому он не знает, что новый URL доступен на тот же хост без перенаправления клиента.

+0

Perfect. Я просто удалил часть 'http: // domain.com', и она сработала. Большое спасибо. – 88mdil

+0

Рад, что это сработало. Если это правильный ответ, отметьте его, спасибо. –