我已经花了很多时间在这上面,我想我可以使用一些帮助。 所以我在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重写规则非常困难。
感谢您的回答!
答案 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]