.htaccess htaccess将起始URL表达式重定向到博客页面

eh57zj3b  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(120)

我想重定向某些以表达式开头的URL。例如
我想重定向:
www.example.com/%2FEwww.example.com/%2FExxxxxxxx)到我的.htaccess文件中的博客页面。
我可以重定向www.example.com/2FExxxxx,但无法将%作为目标。

  • 我在URL中使用的xxxx ...表示%2FE之后的任何表达式。*

这是我的代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule %2FE /blog [R=301,L]
<IfModule>

有人能帮帮我吗?

vfh0ocws

vfh0ocws1#

默认情况下,Apache会拒绝(服务器生成404)任何在URL的URL路径部分包含编码斜线(%2F)的URL。这发生在.htaccess处理请求之前。(这被认为是一项安全功能。)
AllowEncodedSlashes指令(默认值为Off)专门允许使用编码的斜线。但只能在 * server * 或 * virtualhost * 上下文中设置。不能在.htaccess中设置。要允许使用编码的斜线,AllowEncodedSlashes可以设置为OnNoDecode(首选)。
例如:

# In a server / virtualhost context (not .htaccess)
AllowEncodedSlashes NoDecode

然后,一旦在服务器配置中实现了上述内容并重新启动了Web服务器,您就可以继续在.htaccess中使用mod_rewrite来匹配斜杠...

RewriteRule %2FE /blog [R=301,L]

通常,RewriteRule * pattern * 匹配%解码的URL路径。但是,如果设置了NoDecode选项,则编码的斜线(%2F)不会被解码。因此,上述"应该"可以工作(除了模式没有锚定,因此可能匹配太多)。
但是请注意,在RewriteRule * pattern * 匹配的URL路径中,多个(解码的)斜杠被减少了,因此在这里匹配多个连续的斜杠是不可能的。
我将与THE_REQUEST服务器变量进行匹配,该变量与原始请求相同,始终保持%编码(如果请求是这样发出的),并且保留了多个斜杠。注意,THE_REQUEST包含HTTP请求头的第一行,而不仅仅是URL路径。
例如:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/%2FE [NC]
RewriteRule . /blog [R=301,L]

这里不应该使用<IfModule> Package 器。

相关问题