我想重定向以表达式开头的某些url。
为例我想重定向:
www.example.com/%2FE
(www.example.com/%2FExxxxxxxx
)到我的.htaccess
文件中的博客页面
我可以重定向www.example.com/2FExxxxx
,但我不能瞄准%
。
Thexxxx
…我在URL中使用的是表示%2FE
之后的任何表达式。
这是我的代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule %2FE /blog [R=301,L]
<IfModule>
这里有人能帮我吗?默认情况下,Apache拒绝(使用服务器生成的404)任何在URL的URL路径部分包含编码斜杠(%2F
)的URL。这发生在.htaccess
处理请求之前。(这被认为是一个安全特性。)
要特别允许编码斜杠,有AllowEncodedSlashes
指令(默认值是Off
)。但这只能在服务器或virtualhost上下文中设置。不能在.htaccess
中设置。为了允许使用编码斜杠,AllowEncodedSlashes
可以设置为On
或NoDecode
(最好)。
例如:
# In a server / virtualhost context (not .htaccess)
AllowEncodedSlashes NoDecode
然后,一旦在服务器配置中实现了上述配置并重新启动了web服务器,您可以在.htaccess
中使用mod_rewrite继续匹配斜杠…
RewriteRule %2FE /blog [R=301,L]
通常,RewriteRule
模式匹配%解码的url路径。但是,如果设置了NoDecode
选项,则不解码已编码的斜杠(%2F
)。所以上面的"应该"工作(除了模式没有锚定,所以可能匹配太多)。
但是请注意,在与RewriteRule
模式匹配的url路径中减少了多个(解码的)斜杠。因此,这里不可能匹配多个连续斜杠。
我将与THE_REQUEST
服务器变量进行匹配,该变量与原始请求相同,并且始终保持%编码(如果请求是这样发出的)。并且保留了多个斜杠。注意,THE_REQUEST
包含HTTP请求头的第一行,而不仅仅是url路径。
例如:
RewriteEngine On
RewriteCond %{THE_REQUEST} s/%2FE [NC]
RewriteRule . /blog [R=301,L]
您应该不在这里使用<IfModule>
包装器。