2014-10-06 4 views
0

редактировать: Этот вопрос в настоящее время спорный вопрос, поскольку весь сайт будет обслуживаться с помощью HTTPS.htaccess сила WWW и сила HTTPS для определенного пути и concrete5 симпатичных URL-

Мои .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

Ваше 2-е правило не выглядит правильно, так как 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

+0

Вы заметили использование условия 'RewriteCond% {HTTPS} s on (s) |', и это обратная ссылка '% 1'. Проверьте его на новый браузер, чтобы избежать кеширования 301. Также скажите, какой URL-адрес вы вводите в свой браузер. – anubhava

+0

Спасибо. Теперь мой вопрос стал спорным, поскольку мы теперь меняем весь сайт на использование HTTPS. – jezmck

Смежные вопросы