我不想怪RewriteRule,但对我来说似乎如此。
最小示例。在实际的代码中,第一个Rule做一些前置,因此与之相反,它具有一些含义。
RewriteRule ^(.*)$ $1
RewriteCond %{REQUEST_URI} ^/pre
RewriteRule ^(.*)$ /post=$1 [R=301,L]
[当提交的URL为example.com/pre/sub
时,我得到301为example.com/post=pre/sub/sub
。我不知道第二个子从哪里来。
我认为这应该可行。第一个规则$1
是pre/sub
,因此它将pre/sub
重写为pre/sub
。 cond检查REQUEST_URI是否以/ pre开头并防止循环,并且最后一条规则匹配所有内容,因此$1
为pre/sub
,然后将其附加到创建的/post=pre/sub
中,然后将其重定向到。但是浏览器得到/post=/pre/sub/sub
。
我已经做过一些测试:
仅提交example.com/pre
会得到预期的/post=pre
;
当我将示例修改为]时>
RewriteRule ^(.*)$ -$1-
RewriteCond %{REQUEST_URI} ^/pre
RewriteRule ^(.*)$ /post=&$1& [R=301,L]
结果重定向到/post=&-pre/sub-/sub&
,表示它被附加在第一条规则之后,但被附加在第二条规则之前。但是在哪里以及如何?
我不想怪RewriteRule,但对我来说似乎如此。最小的例子。在实际代码中,第一个Rule做一些前置,因此与之相反,它具有一些含义。 RewriteRule ^(。*)$ $ 1 ...
菲...这让我有些头疼。经过一番挖掘之后,我决定为mod_rewrite打开日志记录。 <my-docroot-path>
是我机器上文档根目录的绝对路径。