【问题标题】:Mod Rewrite Skip Rules Server errorMod重写跳过规则服务器错误
【发布时间】:2009-05-31 03:30:52
【问题描述】:

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

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

它应该做的就是获取网址

/test

然后转给它参考

/html/test.html

幕后,但前提是环境是生产环境,由 SetEnv 设置

【问题讨论】:

    标签: mod-rewrite


    【解决方案1】:

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

    要做到你所说的,你需要这样的东西:

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

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

    【讨论】:

      【解决方案2】:

      要么像 Todd Gardner 所说的那样做,要么删除多余的规则并将条件绑定到第二条规则:

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

      另外我会使用这条规则来避免递归:

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

      【讨论】:

        【解决方案3】:

        打开 mod rewrite 日志以获得有用的错误。

        RewriteLog rewrite_log
        ReWriteLogLevel 2
        

        为详细程度调整日志级别。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2010-11-13
            • 2012-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-14
            • 2014-02-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多