500内部服务器错误,而不是:404 - 未找到
问题描述:
显然,我的.htaccess中的这些行会导致服务器输出一个500而不是404错误,当尝试访问一个不存在的站点时应该出现这个错误。500内部服务器错误,而不是:404 - 未找到
RewriteEngine On
# Don't rewrite requests to /de or other real files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/(css|scripts)
# Rewrite incoming requests to their equivalent behind /de
RewriteRule ^(.*)$ de/$1 [L,QSA]
唉我很不熟悉.htaccess。在这个导致500而不是404错误的错误中,哪里出错?
这是在日志文件中的错误:
请求超过了10个内部重定向限制由于可能配置错误。如果需要,使用'LimitInternalRecursion'来增加限制。使用'LogLevel debug'来获得回溯。
编辑:
RewriteRule ^(.*)$ de/$1 [L,QSA]
这部分负责的错误。为什么它会阻止404错误页面?
答
该部分负责该错误。为什么它会阻止404错误页面?
这不产生404错误页面的原因是因为防止盲目匹配被重写为de/
的条件。
这些都是你有3个预防性条件:
# these prevent rewriting if the URI doesn't point to a resource
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# this prevents scripts from being rewritten
RewriteCond %{REQUEST_URI} !^.*/(css|scripts)
然而,没有什么阻止如果,例如,/de/blahblah
不存在的重写。因此,如果有人请求/blahblah
,这是发生了什么:
- URI =
/blahblah
- 检查第一condidion:
blahblah
不是目录 - 检查第二个条件:
blahblah
不是一个文件 - 检查第三个条件:
blahblah
不是css或脚本 - 重写为
/de/blahblah
- Rewr伊特发动机循环,URI =
/de/blahblah
- 检查第一condidion:
de/blahblah
不是目录 - 检查第二个条件:
de/blahblah
不是文件 - 检查第三个条件:
de/blahblah
不是CSS或脚本 - 重写到
/de/de/blahblah
- 等等
您需要添加一组附加条件改写IF目标存在:
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -d
因此,你应该有这样的:
RewriteEngine On
# Don't rewrite requests to /de or other real files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/(css|scripts)
# make sure rewrite target actually exists as a file or directory
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -d
# Rewrite incoming requests to their equivalent behind /de
RewriteRule ^(.*)$ de/$1 [L,QSA]
这样, 404将返回,因为没有任何内容会被重写入de/
目录。
似乎你已经产生了一个无限的重写循环或类似的东西。 – 2012-03-21 17:09:20
是的,这似乎是这种情况。该错误应该由上面的.htaccess引起,因为没有它,错误不会发生。但如何修复thix? – BlueHorizon 2012-03-21 17:13:51
我不是'mod_rewrite'专家;我会尝试[阅读文档](http://httpd.apache.org/docs/2.0/rewrite/),并注释掉所有行,然后逐行开始评论,直到它打破。引用:“关于mod_rewrite的好处是它为您提供了Sendmail的所有可配置性和灵活性。mod_rewrite的缺点是它为您提供了Sendmail的所有可配置性和灵活性。” – 2012-03-21 17:18:36