Zend URL переписать BASE_URL / en в BASE_URL? Lang = en - PullRequest
0 голосов
/ 28 декабря 2011

Я уже потратил много часов на это, и я думаю, что мог бы помочь. Итак, у меня есть локальный Zend-проект на http://MY_URL.lh.

У меня есть этот файл htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# RewriteRule ^.*$ /index.php [NC,L]
RewriteRule !\.(js|ico|gif|jpg|png|css|wfs|csv)$ index.php

И я хочу переписать это:

htttp://MY_URL.lh/en 

в это:

htttp://MY_URL.lh/?lang=en

Я уже пытался добавить мое правило

RewriteRule /^([a-z]{2})$ /?lang=$1 [R]

до

RewriteRule ^.*$ - [NC,L]

, но дальнейшая маршрутизация в Zend не работает, за исключением случаев, когда я добавляю флаг [C] в мое правило , но нужное поведение по-прежнему отсутствует.

Также я пробовал с флагом [R = 301].

Буду рад узнать, почему так сложно заставить правила переписывания htaccess в Zend Projects.

Спасибо за ваши ответы!

1 Ответ

0 голосов
/ 28 декабря 2011

Попробуйте добавить это правило до других правил, т. Е. Сразу после RewriteEngine On

RewriteRule ^([a-z]{2})$ /?lang=$1 [R=301,L]

Когда вы добавили его прямо перед RewriteRule ^.*$ - [NC,L], это правило, которое гласит, что обработка всех запросов прекращается, выполняется постоянно, поэтому после этого ничего не работает.

Edit:

Если вы не хотите изменять адрес в URL-адресе, что будет делать перенаправление, тогда я предполагаю, что вы захотите продолжить обработку правил и после этого, чтобы приложение php могло подобрать Lang Param. В этом случае оставьте правило там, где оно есть, но удалите оба флага и добавьте флаг QSA, если присутствуют другие параметры строки запроса.

RewriteRule ^([a-z]{2})$ /?lang=$1 [QSA]
...