Pek*_*ica 32 apache mod-rewrite
有没有办法使用mod_rewrite为许多URL 主动提供Apache的默认内置404页面?不是自定义错误文档,而是像
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule -- serve 404 page -----
Run Code Online (Sandbox Code Playgroud)
我知道如何构建一个发送404标头的PHP页面,并mod_rewrite重定向所有的URL,但我更喜欢mod_rewrite仅基于的解决方案.
我刚想到了重定向到一个不存在的地址:
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule .* /sflkadsölfkasdfölkasdflökasdf
Run Code Online (Sandbox Code Playgroud)
但这会在错误页面上给用户提供"/sflkadsölfkasdfölkasdflökasdf不存在"的消息,这看起来有点不专业.
mer*_*tor 47
您可以使用该R标志RewriteRule强制重定向具有给定的状态代码:
虽然这通常用于重定向,但可以在此处给出任何有效的状态代码.如果状态代码超出重定向范围(300-399),则删除替换字符串并停止重写,就像使用L标志一样.
所以这:
RewriteRule ^/?page\.html$ - [R=404]
Run Code Online (Sandbox Code Playgroud)
将返回默认的404页面/page.html.由于这是一个正则表达式,请记住转义\.和锚定$.
- 被忽略(即"替换字符串被删除"),但仍然需要有一些东西来保持规则格式良好.
Gum*_*mbo 11
最好的方法是使用状态代码404 设置R标志:
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule ^ - [L,R=404]
Run Code Online (Sandbox Code Playgroud)
但这只能在Apache 2之后使用.
我证实了这一点
RewriteRule ^ - [L,R=404]
Run Code Online (Sandbox Code Playgroud)
要么
RewriteRule ^ - [L,redirect=404]
Run Code Online (Sandbox Code Playgroud)
不行.以下是官方Apache网站的解释:
但是,如果状态代码在重定向范围(300-399)之外,则替换字符串将完全丢弃,并且重写将停止,就像使用了L一样.
所以最好的解决方案是使用404标头重定向到404.php文件,如后面所述.
| 归档时间: |
|
| 查看次数: |
51140 次 |
| 最近记录: |