index.php 的 .htaccess 重定向正在破坏 404 页

Posted

技术标签:

【中文标题】index.php 的 .htaccess 重定向正在破坏 404 页【英文标题】:.htaccess redirect of index.php is breaking 404 pages 【发布时间】:2012-11-09 22:52:41 【问题描述】:

我最近通过 .htaccess 设置了 index.php 重定向。这里的想法是消除当站点同时具有 index.php 和 /(homapage)被索引时出现的重复内容问题。

这是我原来的 .htaccess

Options -Indexes
ErrorDocument 403 /customerrors/403.html
ErrorDocument 401 /customerrors/401.html
ErrorDocument 400 /customerrors/400.html
ErrorDocument 500 /customerrors/500.html
ErrorDocument 404 /customerrors/404.html

非常基本。

我使用此处列出的技术将 index.php 重定向到 /。

http://www.askapache.com/htaccess/redirect-index-blog-root.html

它也很好用。一个问题是,它打破了 404 页。

这是破坏 404 页面的修改后的 .htaccess。

RewriteEngine On
RewriteBase /
DirectoryIndex index.php
RewriteCond %http_host ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %THE_REQUEST ^[A-Z]3,9\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://example.com/ [R=301,L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
Options -Indexes
ErrorDocument 403 /customerrors/403.html
ErrorDocument 401 /customerrors/401.html
ErrorDocument 400 /customerrors/400.html
ErrorDocument 500 /customerrors/500.html
ErrorDocument 404 /customerrors/404.html

因此,如果用户键入或访问 www.example.com/dafjkadbfda 而不是提供 404 页面,则 URL 保持不变(在这种情况下是损坏的)并切断 index.php 页面。

这反过来又打开了另一罐蠕虫。所有这些损坏的页面都会作为重复的内容和元数据出现。

是否有另一种编写 .htacess 重定向的方法来考虑 404 页面?似乎这就是这里的冲突。

提前致谢。

【问题讨论】:

能够解决这个问题。 .htaccess index redirect with custom 404s 【参考方案1】:

.htaccess 的这一部分是“破坏”404 的部分:

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]

您可以通过从 PHP 脚本发送 404 错误来解决问题:

if ($not_a_valid_page)
    header("$_SERVER[SERVER_PROTOCOL] 404 Not Found");
    readfile("./customerrors/404.html");
    die();

【讨论】:

以上是关于index.php 的 .htaccess 重定向正在破坏 404 页的主要内容,如果未能解决你的问题,请参考以下文章

Laravel SSL .htaccess 重定向到 index.php

htaccess - 不需要的重定向到 index.php

htaccess 仅针对域根将 index.html 重定向到 index.php

使用 htaccess 从 index.php 重定向到 another.php 文件

为啥我的 .htaccess 仅针对 https / ssl 不将 uri 路径重定向到 index.php?

htaccess 将所有请求重定向到 index.php,子文件夹除外