2014-10-06 40 views
0

编辑:这个问题是现在没有实际意义的整个网站将使用HTTPS的.htaccess力www和某些路径和Concrete5漂亮的URL力HTTPS

.htaccess导致重定向循环供应。

我需要所有三个部分的工作,每个的目的是在评论。

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# Force HTTPS for /book unless dev or already there 
RewriteCond %{HTTP_HOST} !^dev\. 
RewriteCond %{HTTPS} !^on$ 
RewriteRule ^book https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Force www prefix unless dev or already there 
RewriteCond %{HTTP_HOST} !^dev\. 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ %{REQUEST_PROTOCOL}://www.%{HTTP_HOST}/$1 [L,R=301] 

# Concrete5 pretty URLs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}/index.html !-f 
RewriteCond %{REQUEST_FILENAME}/index.php !-f 
RewriteRule . index.php [L] 
</IfModule> 

我有到现场服务器上的工作,因为该证书是唯一有效的有(有需要www.)。

我已经尝试了很多变化的上述,但我很难过,所以我希望新鲜的眼睛会有所帮助,很多预先感谢。

回答

0

你的第二条规则看起来不正确,因为REQUEST_PROTOCOL的值为HTTP/1.1

您可以使用此代码:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# Force HTTPS for /book unless dev or already there 
RewriteCond %{HTTP_HOST} !^dev\. 
RewriteCond %{HTTPS} !^on$ 
RewriteRule ^book https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# Force www prefix unless dev or already there 
RewriteCond %{HTTPS}s on(s)| 
RewriteCond %{HTTP_HOST} !^(?:www|dev)\. [NC] 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

# Concrete5 pretty URLs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}/index.html !-f 
RewriteCond %{REQUEST_FILENAME}/index.php !-f 
RewriteRule . index.php [L] 
</IfModule> 
+0

谢谢,但我仍然得到重定向循环。你能否告诉我你在做什么不同(除了'REQUEST_PROTOCOL'位)以避免循环? – jezmck 2014-10-06 12:43:13

+0

您是否注意到(s)|'上的条件'RewriteCond%{HTTPS}的使用并且它是反向引用'%1'。测试一个新的浏览器以避免301缓存。同时告诉我你在浏览器中输入了什么URL。 – anubhava 2014-10-06 14:17:57

+0

谢谢。现在我们的问题变得没有实际意义,因为我们现在正在将整个网站更改为使用HTTPS。 – jezmck 2014-10-07 11:37:05