提问人:Pekka 提问时间:3/15/2010 最后编辑:David MolesPekka 更新时间:11/17/2015 访问量:69780
重定向至Apache内置404页面,其中包含mod_rewrite?
Redirect to Apache built-in 404 page with mod_rewrite?
问:
有没有办法使用 mod_rewrite 为多个 URL 主动提供 Apache 默认的内置 404 页面?不是自定义错误文档,而是像这样的规则
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule -- serve 404 page -----
我知道如何构建一个发送 404 标头的 PHP 页面并将所有 URL 重定向到那里,但我更喜欢仅基于mod_rewrite
mod_rewrite
我只是想到重定向到一个不存在的地址:
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule .* /sflkadsölfkasdfölkasdflökasdf
但这会在错误页面上给用户显示消息“/sflkadsölfkasdfölkasdflökasdf 不存在”,这看起来有点不专业。
答:
这应该有效:
RewriteEngine on
RewriteRule ^/page.html /error404.html [L]
不过,这不会给出 404 标头。您可以尝试 chaning to 标记,但我怀疑这是否有效(它应该仅适用于重定向)。[L,R=404]
你在PHP中这样做的想法会奏效。如果所有“错误页面”页面都是服务器端(即.PHP),那么您可以简单地使用以下代码:
<?php
header( 'HTTP/1.0 404 Not Found' );
include 'error404.html';
评论
index.php
您可以使用 RewriteRule
上的标志来强制使用给定状态代码进行重定向:R
虽然这通常用于重定向,但可以在此处提供任何有效的状态代码。如果状态代码超出重定向范围 (300-399),则删除 Substitution 字符串并停止重写,就像使用了 L 标志一样。
所以这个:
RewriteRule ^/?page\.html$ - [R=404]
将返回 的默认 404 页面。由于这是一个正则表达式,请记住转义和锚定。/page.html
\.
$
-
被忽略(即“替换字符串被删除”),但仍然需要一些东西来保持规则的格式正确。
评论
whatever
/
RewriteRule ^/page.html
[R=404]
最好的方法是使用状态代码 404 设置 R 标志:
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule ^ - [L,R=404]
但这仅在 Apache 2 之后才可用。
评论
我确认
RewriteRule ^ - [L,R=404]
或
RewriteRule ^ - [L,redirect=404]
行不通。以下是Apache官方网站的解释:
但是,如果状态代码超出重定向范围 (300-399),则 替换字符串将被完全删除,并且重写将停止 就好像使用了 L 一样。
因此,最好的解决方案是重定向到带有 404 标头的 404.php 文件,如下所述。
评论
-
评论