Чтобы получить правильные «хорошие URLs», вам нужно перенаправить некрасивые URL, чтобы хорошо URL, и внутренне переписать хороший URL, чтобы уродливые, на самом деле работает, URL. У вас уже есть внутренняя переписывание.
С Apache 2.3.9 on вы можете использовать следующее решение. Флаг END
недоступен в более ранних версиях и будет вызывать внутреннюю ошибку сервера при использовании. Измените R
на R=301
, чтобы сделать перенаправление постоянным. Делайте это только тогда, когда все перенаправления и перезаписи работают так, как вы хотите, поскольку браузеры будут кэшировать постоянные переадресации. Флаг END полностью прекратит переписывание и предотвратит бесконечный цикл.
RewriteEngine on
RewriteBase/
RewriteCond %{QUERY_STRING} city=([^&]*)
RewriteRule ^index\.php$ /city/%1? [R,L]
RewriteRule ^city/([^/]*)$ /index.php?city=$1 [END]
В более ранних версиях Apache вам понадобилось использовать хак. Это работает, потому что %{THE_REQUEST}
доступен только как это с внешними запросами, не тогда, когда URL переписан:
RewriteEngine on
RewriteBase/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\?city=(.*)\s [NC]
RewriteRule^city/%1? [R,L]
RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L]
Пожалуйста, обратите внимание, что я не могу проверить либо RewriteRule на этом компьютере, но я довольно уверен, что я Жду» t сделать опечатку.
попробуйте заменить '*' на '+'. – M1K1O
Вы уверены, что сервер позволяет вам изменить конфигурацию из файла .htaccess? Вы можете проверить это, помещая мусор в этот файл и видя, появится ли ошибка 500. – leafnode
@ M1K1O, Это сделал трюк, но, как упоминалось ниже, я должен написать город/лондон в адресной строке, чтобы увидеть его! он не сделает это автоматически, если вы знаете, что я имею в виду! есть идеи ? –