нужна помощь .htaccess - PullRequest
       18

нужна помощь .htaccess

0 голосов
/ 04 февраля 2011

В чем разница между

RedirectPermanent и RewriteRule

я наткнулся на код

RewriteRule ^coaching/([^/]+)/?$ search_result.php?categoryName=$1  [NC,L]

другой параметр

RedirectPermanent "/coaching/Run to live"   http://www.example.com/coaching

Прежнее правило нарушает мои настройки, я тоже не могу это удалить.

Это делает вывод как это

http://www.example.com/coaching?categoryName=Run%20to%20live

Что следует добавить, чтобы без изменения первого кода я смог получить результат

http://www.example.com/coaching

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Директива RewriteRule происходит от mod_rewrite , тогда как директива RedirectPermanent происходит от mod_alias .

В этом сценарии они плохо играют вместе. RedirectPermanent использует исходный URL / coaching / Run to live , но видит измененную строку запроса ? CategoryName = Run% 20to% 20live , созданную вашим RewriteRule. Несмотря на то, что это довольно неожиданно, необходимо использовать вместе mod_rewrite и mod_alias в контексте для каждого каталога (.htaccess).

Так как вам все равно нужен mod_rewrite для вашего исходного RewriteRule, лучшим вариантом будет также использовать RewriteRule вместо RedirectPermanent для второй операции. Это будет выглядеть примерно так:

# Perform this redirect first
RewriteRule "^coaching/Run to live$" http://www.example.com/coaching [R=301,L]

RewriteRule ^coaching/([^/]+)/?$ search_result.php?categoryName=$1  [NC,L]
1 голос
/ 04 февраля 2011

Разница (при определенных условиях) заключается в том, что при использовании RedirectPermanent HTTP-ответ равен 301 (Permanent Redirect) - сообщая браузеру / сканеру, что страница перемещена постоянным образом ... RewriteRule возвращает 302 (если не указано иное впараметры) - и это означает для браузера, что это перенаправление является «временным» и что в будущем эта ссылка снова будет обслуживать запрошенный контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...