mod_rewrite не переписывает URL - PullRequest
0 голосов
/ 06 марта 2012

В чем причина, почему что-то подобное не работает:

php файл: display.php (это пустой файл)

.htaccess имеет следующее:

RewriteEngine on
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ display.php?country=$1&state=$2&city=$3 [L]

когда я пытаюсь:

http://somewebsite.com/display.php?country=USA&state=Minnesota&city=Minneapolis

это НЕ переписывает это как

http://somewebsite.com/USA/Minnesota/Minneapolis

Почему?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Если вы пытаетесь переписать с:

http://somewebsite.com/display.php?country=USA&state=Minnesota&city=Minneapolis

на:

http://somewebsite.com/USA/Minnesota/Minneapolis

Тогда ваше правило перезаписи обратное - формат для RewriteRule строк is:

RewriteRule <pattern to match> <substitution>

Таким образом, вы бы хотели, чтобы шаблон соответствовал для ссылки на /display.php..., а замена была бы новым URI /country/state/city.Кроме того, вам нужно использовать условное выражение RewriteCond, чтобы соответствовать строке запроса.Ваше правило должно выглядеть примерно так:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^country=([a-zA-Z]+)&state=([a-zA-Z]+)&city=([a-zA-Z]+)$
RewriteRule ^/display.php$ /%1/%2/%3? [R]

(обратите внимание на завершающий ? в конце RewriteRule - это означает, что строка запроса должна быть удалена. Без завершающего ?, вы бы повторили строку запроса.)

0 голосов
/ 06 марта 2012

Возможно, вам не хватает косой черты в целевом URL.

...