RewriteRule无法捕获反向引用

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

我在.htaccess文件中有一个RewriteRule,但无法使其正常工作:

RewriteRule ^(?!(redirect-build)) redirect-build/index.php?url=$1

没有捕获到反向引用$ 1,Apache重写了其中没有值的URL参数。这是日志文件的片段:

[Fri Mar 13 13:46:26.254929 2020] [rewrite:trace2] [pid 10612:tid 1344] mod_rewrite.c(477): [client 127.0.0.1:58838] 127.0.0.1 - - [domain/sid#1c4a1bda5b0][rid#1c4a2df8180/initial] [perdir D:/document-root/path/to/directory/] rewrite 'zalety-jablek' -> 'redirect-build/index.php?url='
[Fri Mar 13 13:46:26.254929 2020] [rewrite:trace3] [pid 10612:tid 1344] mod_rewrite.c(477): [client 127.0.0.1:58838] 127.0.0.1 - - [domain/sid#1c4a1bda5b0][rid#1c4a2df8180/initial] split uri=redirect-build/index.php?url= -> uri=redirect-build/index.php, args=url=

有什么解决方法吗?

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

示例:example.com/some-path应解析为:example.com/redirect-build/index.php?url=some-path

在这种情况下,您需要调整RewriteRule模式以使其匹配并捕获值,如下所示:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ redirect-build/index.php?url=$1 [L,QSA,NC]
  • [([\w-]+)是捕获组,以匹配并捕获任何单词字符或连字符的1 +
  • RewriteCond用于跳过此重写的现有文件和目录
© www.soinside.com 2019 - 2024. All rights reserved.