3

我在使用 .htaccess RewriteEngine 时遇到了一个奇怪的问题。

我有这个简单的规则:

RewriteEngine On
RewriteRule ^(.\*)/(.\*).php$ pages/test.php?lang1=$1&page1=$2 [L]

在 pages/test.php 我把这个 php 代码:

echo('lang: '.$_GET['lang1'].'< br />');    
echo('page: '.$_GET['page1'].'< br />');    
echo('querystring: '.$_SERVER['QUERY_STRING']);

因此,当调用http://test.local/en-US/something.php时,我会期望类似:

lang: en-US    
page: something    
querystring: lang1=en-US&page1=something

相反,这是我从页面得到的奇怪输出:

lang: pages    
page: test    
querystring: lang1=pages&page1=test

有人可以帮我吗?

4

2 回答 2

2

你得到这个结果是因为你创建了一个循环,尝试使用这些行:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/pages/test\.php$
RewriteRule ^(.*)/(.*)\.php$ /pages/test.php?lang1=$1&page1=$2 [L]
于 2012-08-27T15:20:25.617 回答
1

您还可以使用 QSA 标志:

RewriteRule ^(.*)/(.*).php$ pages/test.php?lang1=$1&page1=$2 [QSA,L]

当替换 URI 包含查询字符串时,RewriteRule 的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用 [QSA] 标志会合并查询字符串。

http://httpd.apache.org/docs/current/rewrite/flags.html

于 2012-08-27T15:26:33.467 回答