特定 30x 重定向

特定 30x 重定向

如何在 htaccess 中执行 30x 重定向,但仅限于以此开头的 URL:

http://example.com/x/*

我想将这些重定向到(HTTPS):

https://example.com/x/*
  • 如通配符,例如:example.com/x/batman

我不希望重定向影响此域上的任何其他 URL。

我可以使用 PHP 进行此重定向,但我的理解是,如果我在文件中执行此操作.htaccess,速度会稍微快一点,因为无需执行 PHP。对吗?基本上,我试图以最快的速度进行直接操作。

这是我目前所拥有的,但并不多。它确实有效,并且成功将 https 重定向到 http,但我需要它仅适用于遵循上述模式的特定 URL:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案1

RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

要匹配以 开头的特定 URL 路径,/x/请将 改为RewriteRule(^x/无斜线前缀)。例如:

RewriteRule ^x/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

测试前您需要清除浏览器缓存。(因此,先使用临时 302 重定向进行测试会更容易。)

不过,关于您的指令有几点需要注意...

  • 这显然是从 HTTPS 重定向到 HTTP - 与您之前的示例中所述相反(并且在 2019 年非常不推荐)?!

  • 使用HTTPS 环境变量(即%{ENV:HTTPS})是非标准的。想必这是根据您主机的指示?


https://example.com/?wildcard重定向至http://example.com/wildcard

RewriteRule 图案(例如^x/以上)仅与 URL 路径匹配 - 明显排除了 URL 的查询字符串部分。

为了匹配查询字符串,您需要一个RewriteCond状况) 与服务器变量匹配的指令QUERY_STRING

例如,要重定向example.com/?fooexample.com/foo,您可以执行以下操作:

RewriteCond %{QUERY_STRING} ^(foo)$
RewriteRule ^$ /%1 [QSD,R,L]

其中%1是最后一个匹配条件中第一个捕获组的反向引用。请注意,上例中没有 URL 路径(用正则表达式 表示^$)。QSD需要 (Query String Discard) 标志来从重定向 URL 中删除查询字符串。

如果你想要一个更“通配符”的变体(匹配任何事物在查询字符串中),正如您在示例中所建议的那样,然后是类似以下内容:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ /%1 [QSD,R,L]

请注意,R没有状态代码的标志默认为 302(临时)重定向。

相关内容