не-www для www и не-http для https - PullRequest
       15

не-www для www и не-http для https

1 голос
/ 19 января 2012

У меня есть следующий код для моего файла .htaccess, который я взял отсюда и попытался адаптировать его, как я понимаю из .htaccess, но я не могу заставить его работать (или, возможно, браузер кэшировалэто, но я не могу это очистить).

Options -Indexes
Options +FollowSymlinks

<IfModule mod_rewrite.c>

########## FORCE SSL ##########
RewriteEngine On
RewriteBase / 

# Non-secure requests to www.domain.com should redirect to https://www.domain.com
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.%{HTTP_HOST} [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# All secure (HTTPS) traffic should redirect to https://www.domain.com
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.%{HTTP_HOST} [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}/$1 [L,R=301] 

</IfModule>

Я хочу сделать его как можно более универсальным, чтобы я мог просто скопировать и вставить его на любой сайт, который я делаю, поэтому нет необходимости редактировать его каждыйвремя - я думаю, что я мог бы также сделать это в PHP, но я думаю, что было бы хорошо, если бы .htaccess также был там.com / .htaccess или мне нужно покрыть это в «отрицании всего»?

Ответы [ 2 ]

1 голос
/ 19 января 2012

Второй аргумент RewriteCond должен быть регулярным выражением, поэтому он не может содержать переменную.

Попробуйте добавить следующее в ваш файл .htaccess вместо правил, которые вы имели

#capture top level domain (.com or .co.uk)
RewriteCond %{HTTP_HOST} ([-_a-zA-Z0-9]+\.([a-zA-Z]{2,5}|co\.uk))$ [NC]
RewriteCond %{HTTP_HOST} (www\.)?(.+)$ [NC]
RewriteRule ^ - [E=MY_TLD:%2]

# Non-secure requests to www.domain.com should redirect to https://www.domain.com
RewriteCond %{HTTPS} off
RewriteRule ^ https://www\.%{ENV:MY_TLD}%{REQUEST_URI} [L,R=301] 

# All secure (HTTPS) traffic should redirect to https://www.domain.com
RewriteCond %{HTTPS} on
#if host does not start with www
RewriteCond %{HTTP_HOST} !^www\.[-_a-zA-Z0-9]+\.([a-zA-Z]{2,5}|co\.uk)$ [NC]
RewriteRule ^ https://www\.%{ENV:MY_TLD}%{REQUEST_URI} [L,R=301] 
0 голосов
/ 20 января 2012

Самая короткая версия будет:

RewriteEngine On
RewriteBase / 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} (www\.)?(.+)$ [NC]
RewriteRule ^ https://www\.%2%{REQUEST_URI} [L,R=301] 

Единственным (несколько) недостатком было бы то, что subdomain.example.com перенаправляется на www.subdomain.example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...