显然,我的 .htaccess 中的这些行会导致服务器输出 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 错误?
这是日志文件中的错误:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
编辑:
RewriteRule ^(.*)$ de/$1 [L,QSA]
这部分是导致错误的原因。为什么它可以阻止 404 错误页面?
最佳答案
This part is responsible for the error. Why does it prevent the 404-error page though?
之所以不会产生 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
- 检查第一个条件:
blahblah
不是目录 - 检查第二个条件:
blahblah
不是文件 - 检查第三个条件:
blahblah
不是 CSS 或脚本 - 重写为
/de/blahblah
- 重写引擎循环,URI =
/de/blahblah
- 检查第一个条件:
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/
目录中。
关于.htaccess - 500 内部服务器错误而不是 : 404 - Not Found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809464/