Это будет пример, который реализует оба направления:
- запросы к «симпатичным URL-адресам» внутренне переписываются в фактические сценарии, а
- (возможные) запросы в фактические Сценарии извне перенаправляются на «красивые URL»
Это, очевидно, всего лишь пример, ваш сценарий реального мира обычно немного сложнее. Но этот пример должен указать вам правильное направление ...
RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)lang=(en|ru)(?:&|$)
RewriteRule ^/?admin/?$ /admin/%1 [QSA,R=301]
RewriteCond %{QUERY_STRING} (?:^|&)lang=(en|ru)(?:&|$)
RewriteRule ^/?admin/index\.php$ /admin/%1 [QSA,R=301]
RewriteCond %{QUERY_STRING} (?:^|&)lang=(en|ru)(?:&|$)
RewriteRule ^/?admin/createprofiles\.php$ /admin/%1/createprofiles [QSA,R=301]
RewriteRule ^/?admin/(en|ru)/?$ /admin/index.php?lang=$1 [QSA,END]
RewriteRule ^/?admin/(en|ru)/createprofiles/?$ /admin/createprofiles.php?lang=$1 [QSA,END]
Хорошей идеей будет начать с временного перенаправления 302 (вместо R=301
) и изменить его только на 301 постоянное перенаправление позже, когда вы уверены, что все настроено правильно. Это предотвращает проблемы с кэшированием при испытаниях ...
В случае, если вы получаете внутреннюю ошибку сервера (http status 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию apache http сервер. В этом случае вы увидите определенный намек на неподдерживаемый флаг [END]
в файле журнала ошибок http-серверов. Вы можете попытаться обновить или использовать более старый флаг [L]
, он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.
Эта реализация также будет работать в конфигурации хоста http-серверов или в файле конфигурации Dynami c (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете файл конфигурации Dynami c, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и находилась в папке DOCUMENT_ROOT
хоста.
И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования файлов конфигурации Dynami c (".htaccess"). Эти динамические c файлы конфигурации добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).