.htaccess对特定路径和URL强制使用www和https

.htaccess对特定路径和URL强制使用www和https,.htaccess,mod-rewrite,redirect,https,concrete5,.htaccess,Mod Rewrite,Redirect,Https,Concrete5,编辑:这个问题现在没有意义,因为整个网站都将使用HTTPS提供服务 My.htaccess正在导致重定向循环 我需要所有三个部分来工作,每个部分的目的都在评论中 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # Force HTTPS for /book unless dev or already there RewriteCond %{HTTP_HOST} !^dev\. RewriteCond %{HTTPS}

编辑:这个问题现在没有意义,因为整个网站都将使用HTTPS提供服务

My
.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>

重新启动发动机
重写基/
#强制/book的HTTPS,除非dev或已经存在
重写cond%{HTTP_HOST}^开发\。
重写cond%{HTTPS}^在$
重写规则^book https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
#强制www前缀,除非dev或已经存在
重写cond%{HTTP_HOST}^开发\。
重写cond%{HTTP_HOST}^www\。
重写规则^(.*)${REQUEST_PROTOCOL}://www.%{HTTP_HOST}/$1[L,R=301]
#5个漂亮的URL
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}/index.html-F
重写cond%{REQUEST_FILENAME}/index.php-F
重写规则。index.php[L]
我必须在live server上工作,因为证书仅在那里有效(需要
www.


我已经尝试了以上的许多变体,但我还是被难倒了,所以我希望这方面的新观点会有所帮助,提前感谢。

您的第二条规则看起来不太正确,因为
请求\u协议
具有
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>

重新启动发动机
重写基/
#强制/book的HTTPS,除非dev或已经存在
重写cond%{HTTP_HOST}^开发\。
重写cond%{HTTPS}^在$
重写规则^book https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301,NE]
#强制www前缀,除非dev或已经存在
在上重写cond%{HTTPS}s|
重写cond%{HTTP_HOST}^(?:www | dev)\。[北卡罗来纳州]
重写规则^http%1://www.%{http_HOST}%{REQUEST_URI}[NE,L,R=301]
#5个漂亮的URL
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}/index.html-F
重写cond%{REQUEST_FILENAME}/index.php-F
重写规则。index.php[L]

谢谢,但我仍然得到一个重定向循环。你能告诉我你在做什么不同的事情(除了
REQUEST\u协议
bit)来避免循环吗?你有没有注意到在上使用了条件
RewriteCond%{HTTPS}和它的反向引用
%1
。在新浏览器中测试它以避免301缓存。另外,请告诉我您在浏览器中输入的URL。谢谢。我的问题现在变得毫无意义了,因为我们现在正在将整个网站改为使用HTTPS。在这种情况下,你仍然需要一些轻量级的规则来强制
HTTPS