我的.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
奇怪的是,我在不同的域上,在不同的服务器上运行完全相同的代码,并且工作正常。
有关导致此错误的原因的任何想法?
谢谢!
答案 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]