Mod重写跳过规则服务器错误

时间:2009-05-30 04:24:40

标签: mod-rewrite

以下代码给出了内部服务器错误,我无法确定原因。

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

所有它应该做的是采取网址

/test

并转而参考

/html/test.html
幕后操作,但前提是环境是生产,由SetEnv设置

4 个答案:

答案 0 :(得分:1)

也许我的mod重写是生锈的,但如果我理解它,那似乎与你说的相反。如果应用程序是生产,那么它将不会重写URL(并且它会跳过规则)。我没有看到任何会导致内部服务器错误的内容。

要做你想说的话,你需要这样的东西:

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} !=production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

如果您仍然遇到问题,请检查您的apache错误日志,其中包含内部服务器错误500的最佳信息

答案 1 :(得分:0)

要么像托德·加德纳那样说,要么删除冗余规则并将条件绑定到第二条规则:

RewriteEngine On
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^(.*)$ html/$1.html

此外,我会使用此规则来避免递归:

RewriteCond %{ENV:APPLICATION} =production
RewriteRule !^html/ html%{REQUEST_URI}.html

答案 2 :(得分:0)

启用mod重写日志以获取有用的错误。

RewriteLog rewrite_log
ReWriteLogLevel 2

调整日志级别以获得详细程度。

答案 3 :(得分:0)

您必须在字符串周围加上引号才能正确比较

RewriteCond %{ENV:APPLICATION} !="production"