.htaccess RewriteRule更改目录以查询字符串500内部服务器错误

时间:2016-03-31 22:22:54

标签: .htaccess mod-rewrite

我的.htaccess文件中有以下代码,这意味着将目录转换为查询字符串参数:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^g/XXXXXXXXXX-WINEGIFTS1$ g/index.php?u=XXXXXXXXXX-WINEGIFTS [L,QSA]
RewriteRule ^g/(.*)$ g/index.php?u=$1 [L,QSA]

因此,http://example.com/g/SOMETEXT应该被重写为http://example.com/g/index.php?u=SOMETEXT

目前看来,它运作良好。

但是,如果我取消注释注释行,我会收到500内部服务器错误。

该行旨在将一个特定网址http://example.com/g/XXXXXXXXXX-WINEGIFTS1重写为http://example.com/g/index.php?u=XXXXXXXXXX-WINEGIFTS

奇怪的是,我在不同的域上,在不同的服务器上运行完全相同的代码,并且工作正常。

有关导致此错误的原因的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于,如果您取消注释第一个规则,那么第二个规则将变为无条件,并且它与 /g/index.php 匹配两次并重写为自身,从而导致无休止的重写循环。

您可以使用以下

Options +FollowSymLinks
RewriteEngine On
##--Skip the all rules bellow if an existent file/dir is requested--##
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#########
 RewriteRule ^g/XXXXXXXXXX-WINEGIFTS1$ g/index.php?u=XXXXXXXXXX-WINEGIFTS [L,QSA]
RewriteRule ^g/(.*)$ g/index.php?u=$1 [L,QSA]