【问题标题】:.htaccess RewriteRule not retaining capture group during domain redirection.htaccess RewriteRule 在域重定向期间不保留捕获组
【发布时间】:2014-04-30 18:46:19
【问题描述】:

我有一个 HTTPS 子域 https://donate.example.com/,它指向与 www 域相同的 Web 根目录。我的服务器上有一个脚本,位于 /donate/ 文件夹中,在其中我有一个 .htaccess 文件,其中包含以下代码。我想确保对http://www.example.com/donation/(或http://direct.example.com/donation/)的任何请求都会重定向到https://donate.example.com/donation/

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} !^donate\.example\.com$ [NC,OR]
  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$ https://donate.example.com/$1 [R=301,L]
</IfModule>

我遇到的问题是 RewriteRule (^(.*)$) 中的捕获组没有被复制到目标 URL ($1),因此用户只会被重定向到 webroot 而不是完整的小路。这意味着用户被重定向到https://donate.example.com/ 而不是https://donate.example.com/donation/(这是我需要/期望的行为)。

知道为什么捕获组不起作用吗?

【问题讨论】:

  • 您是否遇到了缓存问题?请进行深度重新加载或清除浏览器缓存...
  • 我在命令提示符下使用 curl 测试它:curl --head http://www.example.com/donation/。结果总是Location: https://donation.example.com/

标签: apache .htaccess mod-rewrite redirect


【解决方案1】:

问题是在/donation/ 文件夹内为http://www.example.com/donation/ 捕获的值将为空,因为它与/donation/ 相关。

试试这个代码:

 RewriteEngine on
 RewriteBase /donation/

 RewriteCond %{HTTP_HOST} !^donate\.example\.com$ [NC,OR]
 RewriteCond %{SERVER_PORT} 80
 RewriteRule ^ https://donate.example.com%{REQUEST_URI} [R=301,L,NE]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2014-08-16
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多