【问题标题】:Apache .htaccess 404 error redirectApache .htaccess 404 错误重定向
【发布时间】:2011-07-07 14:14:24
【问题描述】:

我正在尝试制作一个 htaccess 文件,该文件将通过 index.php 重定向所有 404 错误。我希望将用户无法访问的页面附加到 index.php 的 URL 中,以便找出失败的页面请求。

例如,如果他们试图访问http://example.com/doesntexist.php,apache 应该将他们重定向到http://example.com/index.php/doesntexist

这就是我所拥有的:

RewriteCond %{REQUEST_FILENAME}  !-l
RewriteCond %{REQUEST_FILENAME}  !-d
RewriteCond %{REQUEST_FILENAME}  !-f
RewriteRule .* index.php?%{QUERY_STRING} [L]

这适用于我的一个虚拟主机,但当我将网站转移到另一个虚拟主机 (GoDaddy) 时失败。

谢谢大家

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    我现在不能测试这个,但是根据this answer,当你设置一个

    ErrorDocument /404.php
    

    (或index.php,无所谓)

    $_SERVER["REQUEST_URI"] 变量将包含原始的失败请求。

    【讨论】:

    • 感谢您的回答。这个解决方案效果很好,但我的问题可能措辞有误。我不希望 Apache 随页面发送 404 标头。这就是我使用重写条件的原因。除了没有 404 标头之外,我如何制作与“ErrorDocument /404.php”产生的效果相同的 htaccess?
    • @Nathan 啊!嗯,这可能很难。 PHP 有 header_remove() 但它似乎没有删除 Apache 以前设置的标头。您确定 GoDaddy 已启用 URL 重写吗?
    【解决方案2】:

    直接解决方案的附注,因为这会阻止正确的 ErrorDocument 重定向工作。希望这可以作为偶然发现与我相同的错误的任何人的参考。

    我创建了一个 .htaccess 并把

    ErrorDocument 404 /Error/404.html
    

    但是重定向永远不会起作用,而是显示默认的“未找到”页面。
    问题其实出在apache2.conf(或者httpd.conf)的设置上。

    删除下面的行立即解决了问题

    AllowOverride None
    

    它禁止 .htaccess 覆盖默认设置。

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 2015-03-24
      • 2013-11-26
      • 2013-06-09
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多