我想从请求中删除扩展并将其添加到服务器端,因此我在.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
没有忽略它。
我的代码出了什么问题?
答案 0 :(得分:1)
请尝试使用此规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
这会处理斜线斜杠问题,并确保在重写之前存在正确的php文件。