【问题标题】:Basis mod_rewrite rule results in 500 internal server error基础 mod_rewrite 规则导致 500 内部服务器错误
【发布时间】:2013-01-15 21:14:34
【问题描述】:

我有这个非常基本的重写规则,无论我尝试什么,都会导致错误 500。

RewriteEngine On
RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L]

我的 httpd.conf 文件有以下内容:(我觉得还可以)

<Directory "/var/www/html">
    Options -Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
   <IfModule mod_suphp.c>
        suPHP_Engine On
        suPHP_UserGroup webapps webapps
    SetEnv PHP_INI_SCAN_DIR
   </IfModule>
</Directory>

对可能出现的问题有什么建议吗?我还尝试在我的重写规则末尾添加$。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    重写引擎将重复循环,直到 URI 停止更改,或达到内部重定向限制,从而引发 500 错误。您的规则的目标 URI /folder/index.php 将被扔回重写引擎,并且您的相同规则的正则表达式匹配它,^folder/(.*)。所以你需要添加某种条件来防止循环。

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/folder/index\.php
    RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L]
    

    这很简单,如果它已经以/folder/index\.php 开头,它就不会应用该规则。你也可以试试:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^folder/(.*) /folder/index.php?Alias=$1 [L]
    

    这对条件的限制要少一些。它仅在请求的 URI 未映射到现有文件或目录时才应用该规则。这假设当您尝试访问 /folder/blahblah 时,没有目录或文件 blahblah,并且您希望通过 index.php 对其进行路由。

    【讨论】:

    • 我完全忽略了循环的情况,有点看不到我的光标,想“你为什么不照你说的做。” (.htaccess,留下困惑并告诉我它正在做它被告知的事情;))谢谢。 +1 并被接受。
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2018-05-10
    • 2011-07-09
    • 1970-01-01
    • 2013-08-11
    • 2012-03-29
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多