Перенаправление с помощью mod_rewrite? - PullRequest
0 голосов
/ 22 августа 2010

Итак, у меня есть веб-страница, которая запрашивает некоторые данные на основе этого параметра search.php?state=AL.

Я пытаюсь написать правило в моем файле .htaccess, которое будет:

  1. перевести website.com/state/AL в search.php?state=AL
  2. Если пользователь специально запросит search.php?state=AL, переведите его в /state/AL

Я выполнил шаг 1, используя это:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC]

Как я могу выполнить шаг 2? Я знаю, что мне придется использовать [R, NC], чтобы переписать URL, но я застрял там.

РЕДАКТИРОВАТЬ: Не уверен, что это имеет значение, но мой веб-хост заставляет меня по какой-то причине добавить RewriteBase / в начало моего .htaccess файла.

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Вы хотите выполнить перенаправление только в том случае, если исходный запрос был направлен на /search.php?state= URL, например:

RewriteEngine On

# Externally redirect /search.php?state=XX --> /state/XX
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/search\.php\?state=([A-Z]{2}) [NC]
RewriteRule ^ http://%{HTTP_HOST}/state/%1? [R=301,L]

# Internally redirect /state/XX --> /search.php?state=XX
RewriteRule ^state/([A-Z]{2}) /search.php?state=$1 [NC]
0 голосов
/ 22 августа 2010

Примерно так бы и получилось:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC, L]
RewriteCond %{QUERY_STRING} state=([A-Za-z][A-Za-z])
RewriteRule ^search\.php$ /state/%1 [R=303, NC]
...