/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]