Zend url将BASE_URL / en重写为BASE_URL?lang = en

时间:2011-12-28 16:15:24

标签: .htaccess zend-route zend-router

我已经花了很多时间在这上面,我想我可以使用一些帮助。 所以我在http://MY_URL.lh有一个本地zend项目。

我有这个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]标志。

我很高兴知道为什么在Zend Projects中制作htaccess重写规则非常困难。

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

尝试在其他规则之前添加此规则,即在RewriteEngine On

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

当您在RewriteRule ^.*$ - [NC,L]之前添加它时,此规则(表示停止处理所有请求)会一直执行,这就是为什么之后无效的原因。

编辑:

如果您不想更改URL中的地址,这是重定向将执行的操作,那么我认为您也希望在此之后继续处理规则,以便php应用程序能够获取lang param。在这种情况下,将规则保留在原来的位置,但删除两个标志并添加QSA标志,以防存在其他查询字符串参数。

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