.htaccess是连接规则

时间:2014-09-25 19:06:07

标签: apache .htaccess mod-rewrite

我有一个.htaccess文件:

Options +FollowSymLinks
RewriteEngine on    
RewriteRule ^([a-zA-Z-]+)\/([0-9]*)\/?$ ler.php?categoria=$1&id=$2

这适用于http://www.domain.com/frases/13571/

关键是我需要在应用此规则后将所有 HTTP 重定向到 HTTPS

所以我写这个:

Options +FollowSymLinks
RewriteEngine on    
RewriteRule ^([a-zA-Z-]+)\/([0-9]*)\/?$ ler.php?categoria=$1&id=$2
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

但是我没有像我想的那样工作。我在执行HTTP请求时得到了这个: https://www.domain.com/frases/13571/?categoria=frases&id=13571

只修改协议而不修改url的其他部分的正确代码是什么? 我认为我的代码在第一个规则中执行了2个请求,并且生成了这个错误的URL。

2 个答案:

答案 0 :(得分:1)

必须将

L标记应用于您的重写规则 您可以使用此代码

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^([^/]+)/([^/]+)/$ /ler.php?categoria=$1&id=$2 [L]

注意:

  • 您不需要转义斜杠(\/可以是/
  • 在使用此代码再次尝试之前,您需要清除浏览器的缓存。您的旧规则现在位于缓存中,如果您不清除它,您将看不到新代码。

答案 1 :(得分:0)

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

您从原始REQUEST_URI重写,当前是您捕获的内容,因此请尝试:

RewriteRule (.*) https://%{HTTP_HOST}$1 [R=301,L]

RewriteRule (.*) https://$1 [R=301,L]

如果不起作用,重写日志可能很有用。