使用 .htaccess 替换 URL 中的问号

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

我的目录下存在一些文件,其名称包含问号。 我正在尝试更换 ?与 %3F 但我收到“404 Not Found”错误。 URL 中的数字是动态的。

我有:

https://www.example.com/uploads/10015015**?**afe/filename.doc

我需要什么:

https://www.example.com/uploads/10015015**%3F**afe/filename.doc

这是我在.htaccess中添加的规则,但它不起作用:

RewriteCond %{QUERY_STRING} ^?afe([^&]*)
RewriteRule (.*) /$1%3F%{QUERY_STRING}? [L]
.htaccess
1个回答
0
投票
RewriteCond %{QUERY_STRING} ^?afe([^&]*)
RewriteCond %{QUERY_STRING} !=""
RewriteRule (.*) /$1%3F%{QUERY_STRING}? [L]

QUERY_STRING
服务器变量不包含
?
。但是,正则表达式
^?afe([^&]*)
完全无效(
?
是量词,
^
不可量化),因此这会导致 500 内部服务器错误,因为正则表达式无法编译

当您已经确定存在与模式匹配的查询字符串(在第一个条件中)时,无需检查查询字符串是否为空(第二个条件)。

尝试以下方法:

RewriteCond %{QUERY_STRING} ^afe/[^&]+\.doc$
RewriteRule (.*) $1\%3F%{QUERY_STRING} [NE,QSD,L]

请注意,

%
之前的
3
必须进行反斜杠转义,以避免其被视为数字反向引用(否则将为空)。

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