这看起来很简单。 ErrorDocument
重定向到另一个页面:
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]
我还删除了一些多余的规则。
关于php - .htaccess 和错误页面 - 留在页面上,不要重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447896/