HTTPS到HTTP重定向不保留自定义URL

时间:2013-11-06 19:44:52

标签: php regex .htaccess mod-rewrite https

假设我有一个名为www.example.com/today.php?id=123的域名。我使用以下代码将其重定向到网址www.example.com/yes/123/some-name

Rewrite Rule ^yes/123/some-name$ today.php?id=123

但是现在我想让这个链接在从https调用时始终重定向到http。所以,我尝试添加以下代码:

RewriteCond %{HTTPS} on
Rewrite Rule ^today\.php(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]

它会被重定向到http,但使用以下网址:www.example.com/today.php?id = 123而不是保留原始的www.example.com/yes/123/some-name。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

更改规则的顺序:

RewriteEngine On

RewriteCond %{HTTPS} on
RewriteRule ^yes/[^/]+/.*$ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R=301]

RewriteRule ^yes/[^/]+/.*$ today.php?id=123 [L,QSA,NC]

通常在重写规则之前保留301规则。

答案 1 :(得分:0)

您需要确保重定向之前内部路由的规则。而且您需要匹配已清理的URL而不是内部映射的URL。如下所示:

RewriteCond %{HTTPS} on
RewriteRule ^yes/[0-9]+/ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]

RewriteRule ^yes/123/some-name$ today.php?id=123 [L]