使用.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
有人能帮助我吗?
答案 0 :(得分:2)
你得到那个结果是因为你创建了一个循环,尝试使用这些行:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/pages/test\.php$
RewriteRule ^(.*)/(.*)\.php$ /pages/test.php?lang1=$1&page1=$2 [L]
答案 1 :(得分:1)
您也可以使用QSA标志:
RewriteRule ^(.*)/(.*).php$ pages/test.php?lang1=$1&page1=$2 [QSA,L]
当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致查询字符串合并。