.htaccess和错误页面 - 留在页面上,不要重定向
这似乎很简单。 ErrorDocument
重定向到另一个页面:.htaccess和错误页面 - 留在页面上,不要重定向
RewriteEngine On
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
但是这些自定义错误页的问题是,浏览器实际上重定向到/err/e=404
的页面,而不是仅仅显示其内容。不使用自定义错误页面时,浏览器中的URL保持不变,因此用户无需再次键入即可更正URL。
问题:如何创建自定义错误页面,这些页面不改变URL,并把它像domain.tld/nonexistantfile
?
背景:使用Debian Wheezy,Apache2和PHP。
更新发布整个.htaccess文件
RewriteEngine On
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
RewriteRule ^favicon.ico$ favicon.ico [L]
RewriteRule ^css/(.*) css/$1 [L]
RewriteRule ^downloads/(.*) downloads/$1 [L]
RewriteRule ^images/(.*) images/$1 [L]
RewriteRule ^js/(.*) js/$1 [L]
RewriteRule index.php(.*) index.php$1 [L]
RewriteRule ^(.*)/(.*=.*) index.php?controller=$1&$2 [L]
RewriteRule ^(.*=.*) index.php?$1 [L]
RewriteRule ^(.*) index.php?controller=$1 [L]
最后一部分使URL的喜欢/home
或page1/page2/param=123
你必须有一个规则,以避免这样的真正的文件/目录重写:
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule^- [L]
RewriteRule ^([^/]+)/([^=]+=.*)$ index.php?controller=$1&$2 [L,QSA]
RewriteRule ^([^=]+=.*)$ index.php?$1 [L,QSA]
RewriteRule ^(.+)$ index.php?controller=$1 [L,QSA]
我也删除了一些冗余规则。
你删除了多余的东西太棒了!但它仍然重定向到'/ err/e = ...',我甚至从一个没有看到该站点的虚拟环境进行测试,以避免缓存问题。 – bytecode77 2014-10-19 06:50:23
在另一个浏览器中测试,并在Firebug中测试它,看看你在Net标签中得到了什么重定向。也可能是'/ err/e = 400'正在通过代码重定向? – anubhava 2014-10-19 07:14:37
调用一个不存在的文件实际上会导致一个'302 Found'错误,因此它会重定向。它实际上应该会导致404错误。 '/ err/e = 404'页面以普通的200响应。 – bytecode77 2014-10-19 07:18:07
没有这些'ErrorDocument'不会让浏览器重定向到'/ err/e = 404'。你可能会有一些冲突的规则造成这种情况。你能发布完整的.htaccess吗? – anubhava 2014-10-19 06:33:19
在这里,你去。 :) – bytecode77 2014-10-19 06:36:22