0

我已经为此花费了很多时间,我想我可以使用一些帮助。所以我在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 重写规则如此困难。

谢谢您的回答!

4

1 回答 1

0

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

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

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

编辑:

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

RewriteRule ^([a-z]{2})$ /?lang=$1 [QSA]
于 2011-12-28T16:28:46.297 回答