我想重定向某些以表达式开头的URL。例如
我想重定向:www.example.com/%2FE
(www.example.com/%2FExxxxxxxx
)到我的.htaccess
文件中的博客页面。
我可以重定向www.example.com/2FExxxxx
,但无法将%
作为目标。
- 我在URL中使用的
xxxx
...表示%2FE
之后的任何表达式。*
这是我的代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule %2FE /blog [R=301,L]
<IfModule>
有人能帮帮我吗?
1条答案
按热度按时间vfh0ocws1#
默认情况下,Apache会拒绝(服务器生成404)任何在URL的URL路径部分包含编码斜线(
%2F
)的URL。这发生在.htaccess
处理请求之前。(这被认为是一项安全功能。)AllowEncodedSlashes
指令(默认值为Off
)专门允许使用编码的斜线。但只能在 * server * 或 * virtualhost * 上下文中设置。不能在.htaccess
中设置。要允许使用编码的斜线,AllowEncodedSlashes
可以设置为On
或NoDecode
(首选)。例如:
然后,一旦在服务器配置中实现了上述内容并重新启动了Web服务器,您就可以继续在
.htaccess
中使用mod_rewrite来匹配斜杠...通常,
RewriteRule
* pattern * 匹配%解码的URL路径。但是,如果设置了NoDecode
选项,则编码的斜线(%2F
)不会被解码。因此,上述"应该"可以工作(除了模式没有锚定,因此可能匹配太多)。但是请注意,在
RewriteRule
* pattern * 匹配的URL路径中,多个(解码的)斜杠被减少了,因此在这里匹配多个连续的斜杠是不可能的。我将与
THE_REQUEST
服务器变量进行匹配,该变量与原始请求相同,始终保持%编码(如果请求是这样发出的),并且保留了多个斜杠。注意,THE_REQUEST
包含HTTP请求头的第一行,而不仅仅是URL路径。例如:
这里不应该使用
<IfModule>
Package 器。