.htaccess 仅当其他规则不适用时重写规则

.htaccess 仅当其他规则不适用时重写规则,.htaccess,redirect,.htaccess,Redirect,我有以下规则: RewriteRule ^error$ 404.php RewriteRule ^home$ index.php 现在我想,domain.com后面的所有内容(在中)都重定向到test.php 是的 重写规则^([^/]+)$test.php 这是可行的,但当我输入“error”或“home”时,它也会重定向到test.php,而不是404.php和index.php当找到匹配的条件时,您可以告诉重写已完成,因此在满足条件时不会继续,因此您的重写可能是这样的: RewriteE

我有以下规则:

RewriteRule ^error$ 404.php
RewriteRule ^home$ index.php
现在我想,domain.com后面的所有内容(在中)都重定向到test.php

是的 重写规则^([^/]+)$test.php


这是可行的,但当我输入“error”或“home”时,它也会重定向到test.php,而不是404.php和index.php

当找到匹配的条件时,您可以告诉重写已完成,因此在满足条件时不会继续,因此您的重写可能是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^error$ 404.php [L,NC]
RewriteRule ^home$ index.php [L,NC]
RewriteRule ^(.*)$ test.php
RewriteEngine On
RewriteBase /

RewriteRule ^error/?$ 404.php [L,NC]
RewriteRule ^home/?$ index.php [L,NC]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ test.php
“L”rewrite标志告诉重定向这是最后一个条件(即不再查看)。“NC”标志使规则不区分大小写。您可以决定是否还需要包含R=301标志

但是,我可以从上面看到一个潜在的问题,因为一旦处理了规则,重写的请求就会返回到URL解析引擎,重写的请求会再次由.htaccess文件处理。这将导致在第二次通过时接受最后一条规则

alternative[END]标志不仅可用于终止当前一轮重写处理,还可用于防止在htaccess上下文中发生任何后续重写处理。我会感兴趣,如果这工作


希望这有帮助。

您可以
重定向\u状态
如下所示:

RewriteEngine On
RewriteBase /
RewriteRule ^error$ 404.php [L,NC]
RewriteRule ^home$ index.php [L,NC]
RewriteRule ^(.*)$ test.php
RewriteEngine On
RewriteBase /

RewriteRule ^error/?$ 404.php [L,NC]
RewriteRule ^home/?$ index.php [L,NC]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ test.php
REDIRECT\u STATUS
在执行某些重写规则后设置为非零值(200)。

尝试以下操作:

RewriteEngine On
RewriteRule ^error$ 404.php 
RewriteRule ^home$ index.php
RewriteCond %{REQUEST_URI} !/(error|home|index|404)
RewriteRule ^([^/]+)$ test.php

问题是,您已经捕获了error和home,但当它们重定向到404或索引时,它们又被上一条规则捕获,因此您应该将它们从上一条规则中排除。

谢谢您的回答。对我来说,它不起作用。当我进入domain.com/error时,它会将我重定向到test.php。与home相同。编辑:我已将“L”替换为“END”,现在可以使用:-)感谢@Jelly的反馈,我在您回复的同时添加了我的答案。经过几个小时的测试,这是唯一的解决方案。非常感谢你!