2016-03-31 27 views
0

我在我的.htaccess文件下面的代码,这意味着到一个目录转换为查询字符串参数:的.htaccess重写规则更改目录要查询字符串500内部服务器错误

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内部服务器错误。

该行是为了重写一个特定的URL,http://example.com/g/XXXXXXXXXX-WINEGIFTS1,如http://example.com/g/index.php?u=XXXXXXXXXX-WINEGIFTS

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

有什么想法引起这个错误?

谢谢!

回答

1

的问题是,如果你取消对第一条规则,然后第二个规则成为无条件和它匹配/g/index.php两次改写到inself引起无休止的循环改写。

您可以使用以下

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] 
+0

感谢。我明白你对循环的看法,我认为(尽管我认为L属性可以防止这种情况),但是我仍然在上面的代码中遇到了500错误。 – Mark

+0

@Mark L标志并不会停止规则处理,它只是告诉引擎退出当前的重写周期,并为处理的第二阶段提出请求 – starkeen

+0

好的,理解,谢谢。 – Mark

相关问题