假设我有一个名为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。我做错了什么?
谢谢!
答案 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]