htaccess重定向导致错误500

时间:2014-04-21 09:59:05

标签: regex .htaccess mod-rewrite redirect apache2

我想从请求中删除扩展并将其添加到服务器端,因此我在.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,但重写规则$1没有忽略它。

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

请尝试使用此规则:

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

这会处理斜线斜杠问题,并确保在重写之前存在正确的php文件。