RewriteRule追加不需要的字符串

问题描述 投票:1回答:1

我不想怪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。我不知道第二个子从哪里来。

我认为这应该可行。第一个规则$1pre/sub,因此它将pre/sub重写为pre/sub。 cond检查REQUEST_URI是否以/ pre开头并防止循环,并且最后一条规则匹配所有内容,因此$1pre/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 ...

regex apache .htaccess mod-rewrite url-routing
1个回答
0
投票

菲...这让我有些头疼。经过一番挖掘之后,我决定为mod_rewrite打开日志记录。 <my-docroot-path>是我机器上文档根目录的绝对路径。

© www.soinside.com 2019 - 2024. All rights reserved.