2014-09-25 101 views
1

我有一个.htaccess文件:的.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

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

+1

只是切换规则的顺序 - 如果HTTP先进行了内部重写,那么外部重写为HTTPS - 应该已经足够了。 – CBroe 2014-09-25 19:10:19

+1

如上 - 你需要做你的301重定向到https第一个 – 2014-09-25 19:11:28

+0

@CBroe这会产生一个缓慢的服务器行为。在第3行和HTTPS条件之前,我还有30个像这样的规则。 – 2014-09-25 19:18:41

回答

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

谢谢!这像一个魅力。 – 2014-09-29 10:57:32

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] 

如果不工作,重写日志可能是有用的。

+0

'chain'不是一个好主意。我提出了另一个答案。 – 2014-09-25 19:35:23