Конфигурация виртуального хоста Apache

Конфигурация виртуального хоста Apache

Привет, я пытаюсь сделать так, чтобы доступ к моему сайту был возможен только через 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

  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Запросы

  1. Затем удалите эти строки из вашей конфигурации 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

Связанный контент