【问题标题】:htaccess redirect cause error 500htaccess 重定向导致错误 500
【发布时间】:2014-04-21 09:59:04
【问题描述】:

我想从请求中删除扩展名并将其添加到服务器端,所以我将这段代码写在 .htaccess 文件中:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L]

此代码在标准使用中效果很好。例如,如果我在 HOME/foo/bar.php
中有文件 我像localhost/foo/bar 一样请求它,代码正在运行并将我重定向到正确的文件。

但是如果我的请求是localhost/foo/bar/(最后是反斜杠),或者localhost/foo/bar/a 我收到内部服务器错误 (500),在日志文件中我收到了Request exceeded the limit of 10 internal redirects

我已经测试了代码,发现%{REQUEST_FILENAME} 忽略了请求的错误后缀/a,所以它只看到HOME/foo/bar,但RewriteRule $1 不会忽略它。

我的代码有什么问题?

【问题讨论】:

    标签: regex .htaccess mod-rewrite redirect apache2


    【解决方案1】:

    试试这个规则:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ /$1.php [L]
    

    这可以解决斜杠问题,并确保在重写之前存在正确的 php 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-01
      • 2011-07-16
      • 2020-11-25
      • 2010-12-17
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多