
Привет, я пытаюсь сделать так, чтобы доступ к моему сайту был возможен только через https и только через поддомен www. В настоящее время я использую следующую конфигурацию виртуального хоста Apache:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://www.example.com%{REQUEST_URI} [R,L]
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=permanent,L]
#..
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://www.example.com%{REQUEST_URI} [R,L]
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
RewriteCond %{SERVER_NAME} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,NC,L]
<Directory /home/{apacheuser}/www>
SSLRequireSSL
Order allow,deny
Allow from all
LimitRequestBody 512000
</Directory>
#..
</VirtualHost>
Боюсь, мои познания в области регулярных выражений довольно ограничены, и мне интересно, является ли это лучшим способом добиться этого?
Спасибо
решение1
Просто замените
# Redirect http requests to https RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule .* https://www.example.com%{REQUEST_URI} [R,L] RewriteCond %{HTTP_HOST} !=www.example.com RewriteRule .* https://www.example.com%{REQUEST_URI} [R=permanent,L]
К
# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R,L]
Таким образом, весь http-трафик будет перенаправлен на https, за исключениемhttp://example.comЗапросы
Затем удалите эти строки из вашей конфигурации https:
# Redirect http requests to https RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule .* https://www.example.com%{REQUEST_URI} [R,L] RewriteCond %{HTTP_HOST} !=www.example.com RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
так что просто продолжай
RewriteCond %{SERVER_NAME} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,NC,L]
которые перенаправляютhttps://example.comкhttps://www.example.com
решение2
%{SERVER_ADDR}
может также помочь переписать IP
редактировать:
Извините, вы не можете использовать переменные в правой части выражения.
Попробуйте что-нибудь вроде этого:
RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^(.*),\1
Или если вы не делаете это динамичным способом
RewriteCond %{SERVER_NAME} !192.168.1.1