.htaccess中的重写模式否定会导致过多的重定向



/mydir/中的.htaccess中应使用哪些重写曲线到http 302将每个请求重定向到http://www.example.com/mydir/output

/mydir/中的.htaccess的当前内容:

RewriteEngine On
RewriteBase "/mydir/"
RewriteRule !"^output$" "output" [R]

输入URL:

http://www.example.com/mydir/input1

http://www.example.com/mydir/input2

http://www.example.com/mydir/input3

预期输出:

http://www.example.com/mydir/output

http://www.example.com/mydir/output

http://www.example.com/mydir/output

真实输出:

ERR_TOO_MANY_REDIRECTS

ERR_TOO_MANY_REDIRECTS

ERR_TOO_MANY_REDIRECTS

RewriteEngine On
RewriteBase "/mydir/"
RewriteRule "^output$" "-" [L]
RewriteRule ".*" "output" [R]
# Further rules are not processed.

我不知道为什么否定不起作用,但是原始重写可以用上面的2个替换。这样,如果URL已经是预期的输出(请参阅仪表板替换和L标志),则第一个重写将停止整个重写过程,以避免重定向循环。否则,所有内容都会由第二个重写器重写为预期的输出URL。如果应避免停止整个重写过程,则可以仅跳过无条件(第二)重写,因此处理每个其他规则。要实现这一目标,请使用下面的S标志:

RewriteEngine On
RewriteBase "/mydir/"
RewriteRule "^output$" "-" [S=1]
RewriteRule ".*" "output" [R]
# Further rules are processed as well.

您在规则上缺少L标志,但是它太宽了;它只有在将实际的URL发送到服务器时才能匹配。我怀疑该请求的最终目的地是一个名为output的无扩展文件,但这就是您的规则坚持。尝试以下操作:

RewriteEngine On
RewriteBase /mydir/
RewriteCond %{THE_REQUEST} !^S++s++/mydir/outputs
RewriteRule ^ output [NS,R,L]
# rules after this should now be processed

您正在检查您的URL是否不是从output开始的,而且总是如此。将规则更改为:

RewriteEngine On
RewriteRule !^/mydir/output$ /mydir/output [R]

最新更新