mod_rewrite перенаправляет браузер, а не переписывает - PullRequest
4 голосов
/ 06 октября 2011

Я использую следующий mod_rewrite для перенаправления из верхнего каталога моего сайта в подкаталог shows/:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^$ shows [L]

Перенаправление работает нормально. Тем не менее, URL-адрес отображает перенаправление, что я считаю, что не следует, если вы используете mod_rewrite.

Для пояснения: браузер, направленный на http://www.example.com/, перенаправляется в подкаталог shows/. Но браузер отображает перенаправление в URL-адресе как http://www.example.com/shows/. Опять же, я понимаю, что с помощью mod-rewrite вы делаете перенаправление невидимым, поэтому пользователь не знает, что перенаправление произошло.

Я что-то не так делаю?

Ответы [ 2 ]

6 голосов
/ 06 октября 2011

Теперь я вижу проблему. Вы переписываете URL с http://www.example.com/ до http://www.example.com/shows. Поскольку /shows является каталогом, а не файлом, Apache после перезаписи отправляет перенаправление завершающего слеша . Вот как это исправить:

RewriteRule ^$ shows/ [L]
# here -------------^

Примечание: поскольку Apache мог отправить заголовок 301 Moved Permanently ранее, браузеры будут кэшировать этот ответ и отображать неверную страницу / содержимое даже после внесения изменений в файл .htaccess. Во время тестирования часто очищайте кэш браузера.

0 голосов
/ 27 августа 2014

Давным-давно мне было интересно то же самое, поэтому я решил поискать в Google и нашел ваш вопрос.Я понял, что есть что-то вроде двух вариантов «Перенаправление» и «Переопределение».Поэтому я думаю, что здесь есть ключ к пониманию того, что вы спрашивали.В основном, есть два варианта перенаправления

без изменения URL-адреса

RewriteEngine on
RewriteRule ^/foo\.html$ /bar.html [PT]

& и перенаправления, изменяющего URL-адрес в браузере.

RewriteEngine on
RewriteRule ^/foo\.html$ bar.html [R]

В любом случае, посмотрите здесь http://httpd.apache.org/docs/2.2/rewrite/remapping.html

...