htaccess重定向开始URL表达式到博客页面



我想重定向以表达式开头的某些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可以设置为OnNoDecode(最好)。

例如:

# 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>包装器。

最新更新