文件不存在时出现内部错误

时间:2010-09-25 17:37:38

标签: php regex .htaccess mod-rewrite

我希望将所有内容都添加到“/”并与“.php”合并

工作正常,但当文件不存在时,我收到内部错误

RewriteRule ([^\/]*) $1.php

2 个答案:

答案 0 :(得分:1)

也许处理不存在的文件和/或目录的情况可能有帮助

RewriteCond %{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} -f

尝试处理这些案例以避免错误

答案 1 :(得分:1)

您可能希望在执行重写之前检查您正在重写的内容,以避免循环(注意您的测试模式与您重写的内容相匹配)。一种可能的方法是执行以下操作:

# Check that the file isn't a directory
RewriteCond %{REQUEST_FILENAME} !-d
# ...nor is it a file
RewriteCond %{REQUEST_FILENAME} !-f
# ...but the result of the rewrite will be
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+) $1.php

如果您使用的是Apache错误消息,那么在生成404的情况下,这也有显示原始URL的(次要)好处。如果您要重写为不存在的PHP文件,服务器会说找不到 /something.php ,而不是 / something / ,但是因为当目标文件不存在时,不执行重写,而是获取 / something /

如果仍然出现500错误,则.htaccess文件中可能存在另一条冲突规则。您还应该检查Apache的错误日志,以获取有关错误的更多详细信息,尽管在这种情况下我怀疑它是超出内部重定向限制的消息。