err_too_many_redirects при попытке перенаправления не www на www

Внутри virtuahost apache conf file /etc/apache2/sites-available/000-default.conf.

Я попытался поместить этот код в файл apache conf.

ServerName example.com RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^/(.*)$ http://www.example.com/$1 [L,R=301]

] Также я попытался.

< If "%{HTTP_HOST} != 'YOUR-DOMAIN.com'"> Redirect "/" "http://www.YOUR-DOMAIN.com/" </If>

Также сделал это.

<VirtualHost *:80> ServerName example.com Redirect permanent / http://www.example.com/ </VirtualHost> <VirtualHost *:80> ServerName www.example.com # real server configuration </VirtualHost>
0
задан 5 January 2018 в 22:52

2 ответа

Чтобы решить вашу проблему, вы должны понимать концепцию «NameVirtualHosting» и специальный способ Ubuntu для развертывания веб-службы apache.

NameVirtualHost

Ваш (локальный) веб-сервер apache может обслуживать разные веб-сайты по одному и тому же адресу, если они «именованы» по-разному. Веб-сервер пытается сопоставить имя хоста (например, example.com) с соответствующей директивой Servername или ServerAlias в вашей конфигурации apache. Для каждого «веб-сайта» вам нужен отдельный контейнер <VirtualHost> в вашей конфигурации; в вашем случае вам нужен один для example.com и другой для www.example.com.

NameVirtualHost

Пакет сервера Ubuntu apache2 изменяет значение по умолчанию binyries, файлы конфигурации и каталоги:

Бинарный файл Apache Webserver /usr/sbin/apache2. Корневой каталог сервера /etc/apache2. Основная конфигурация - /etc/apache2/apache2.conf. Дополнительные конфигурации сервера переходят к /etc/apache2/conf.d. Конфигурации модулей находятся в /etc/apache2/mods-available/ Сайты VirtualHost настроены в /etc/apache2/sites-available/

До сих пор так просто; теперь для меня это сложный бит (для меня это так): с Ubuntu вы получаете четыре команды для включения / выключения модулей и (!) конфигурации VirtualHosts:

Бинар Apache Webserver - /usr/sbin/apache2 a2enmod / a2dismod

с этими командами вы включаете фактические веб-сайты, которые вы настроили в /etc/apache2/sites-available/. Существует по крайней мере одна конфигурация виртуального хоста по умолчанию default.conf, которая, если включена a2ensite default, связана как sites-enabled/000.default.conf.

И все это работает, потому что основная конфигурация apache2.conf содержит эту директиву Include:

Include sites-enabled/

Давайте начнем практично:

Удалите все символические ссылки в sites-enabled/, и если вы случайно сохранили фактические файлы конфигурации в sites-enabled/, переместите их в sites-available (будьте осторожны, не перезаписывайте существующие файлы в sites-available/, а переименуйте старые).

Теперь вы создаете два новых файла виртуального хоста на сайтах - available /:

vi /etc/apache2/sites-available/0_www.example.com <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www DirectoryIndex index-www.html <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error-www-example-com.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access-www-example-com.log combined </VirtualHost> vi sites-available/1_example.com <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName example.com ErrorLog ${APACHE_LOG_DIR}/error-example-com.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access-example-com.log combined RewriteEngine On RewriteRule ^/(.*) http://www.example.com/$1 [R=302] </VirtualHost>

и включаете их, а сценарий создает символическую ссылку от sites-available/ до sites-enabled/:

sudo a2ensite 0_www.example.com

sudo a2enmod rewrite

sudo a2ensite 1_example.com

(перезапустить службу apache2 - service apache2 restart или systemctl restart apache2) [ ! d28] ls -l sites-enabled/ total 0 lrwxrwxrwx 1 root root 30 Jan 8 17:59 example.com -> ../sites-available/example.com lrwxrwxrwx 1 root root 34 Jan 8 17:52 www.example.com -> ../sites-available/www.example.com

Нам нужны простые индексные страницы

# cat /var/www/index-non.html <html><body><h1>example.com</h1> This is the NON-www index page </body></html> # cat /var/www/index-www.html <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html>

Пожалуйста, имейте в виду, что первая директива <VirtualHost >, встречающаяся веб-сервером apache, будет веб-контейнером по умолчанию, поэтому порядок директив VirtualHost важно; в нашем случае, если я вызываю веб-сервер без определенного имени хоста или имени хоста, который не настроен, я обслуживаю www-index, потому что это первая директива virthost.

# No Hostname given curl http://127.0.0.1/ <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html> # index-www curl -H "Host: www.example.com" http://127.0.0.1/ <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html> # non-www index curl -H "Host: example.com" http://127.0.0.1/ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="http://www.example.com/">here</a>.</p> <hr> <address>Apache/2.2.22 (Ubuntu) Server at example.com Port 80</address> </body></html>

(Пожалуйста обратите внимание на использование переменной заголовка хоста -H)

Чтобы иметь в виду, что для работы NameVirtualHosting необходимо правильно настроить веб-сервер и веб-клиент.

Надеюсь, мои инструкции может помочь вам решить вашу проблему.

0
ответ дан 17 July 2018 в 23:47

Чтобы решить вашу проблему, вы должны понимать концепцию «NameVirtualHosting» и специальный способ Ubuntu для развертывания веб-службы apache.

NameVirtualHost

Ваш (локальный) веб-сервер apache может обслуживать разные веб-сайты по одному и тому же адресу, если они «именованы» по-разному. Веб-сервер пытается сопоставить имя хоста (например, example.com) с соответствующей директивой Servername или ServerAlias в вашей конфигурации apache. Для каждого «веб-сайта» вам нужен отдельный контейнер <VirtualHost> в вашей конфигурации; в вашем случае вам нужен один для example.com и другой для www.example.com.

NameVirtualHost

Пакет сервера Ubuntu apache2 изменяет значение по умолчанию binyries, файлы конфигурации и каталоги:

Бинарный файл Apache Webserver /usr/sbin/apache2. Корневой каталог сервера /etc/apache2. Основная конфигурация - /etc/apache2/apache2.conf. Дополнительные конфигурации сервера переходят к /etc/apache2/conf.d. Конфигурации модулей находятся в /etc/apache2/mods-available/ Сайты VirtualHost настроены в /etc/apache2/sites-available/

До сих пор так просто; теперь для меня это сложный бит (для меня это так): с Ubuntu вы получаете четыре команды для включения / выключения модулей и (!) конфигурации VirtualHosts:

Бинар Apache Webserver - /usr/sbin/apache2 a2enmod / a2dismod

с этими командами вы включаете фактические веб-сайты, которые вы настроили в /etc/apache2/sites-available/. Существует по крайней мере одна конфигурация виртуального хоста по умолчанию default.conf, которая, если включена a2ensite default, связана как sites-enabled/000.default.conf.

И все это работает, потому что основная конфигурация apache2.conf содержит эту директиву Include:

Include sites-enabled/

Давайте начнем практично:

Удалите все символические ссылки в sites-enabled/, и если вы случайно сохранили фактические файлы конфигурации в sites-enabled/, переместите их в sites-available (будьте осторожны, не перезаписывайте существующие файлы в sites-available/, а переименуйте старые).

Теперь вы создаете два новых файла виртуального хоста на сайтах - available /:

vi /etc/apache2/sites-available/0_www.example.com <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www DirectoryIndex index-www.html <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error-www-example-com.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access-www-example-com.log combined </VirtualHost> vi sites-available/1_example.com <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName example.com ErrorLog ${APACHE_LOG_DIR}/error-example-com.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access-example-com.log combined RewriteEngine On RewriteRule ^/(.*) http://www.example.com/$1 [R=302] </VirtualHost>

и включаете их, а сценарий создает символическую ссылку от sites-available/ до sites-enabled/:

sudo a2ensite 0_www.example.com

sudo a2enmod rewrite

sudo a2ensite 1_example.com

(перезапустить службу apache2 - service apache2 restart или systemctl restart apache2) [ ! d28] ls -l sites-enabled/ total 0 lrwxrwxrwx 1 root root 30 Jan 8 17:59 example.com -> ../sites-available/example.com lrwxrwxrwx 1 root root 34 Jan 8 17:52 www.example.com -> ../sites-available/www.example.com

Нам нужны простые индексные страницы

# cat /var/www/index-non.html <html><body><h1>example.com</h1> This is the NON-www index page </body></html> # cat /var/www/index-www.html <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html>

Пожалуйста, имейте в виду, что первая директива <VirtualHost >, встречающаяся веб-сервером apache, будет веб-контейнером по умолчанию, поэтому порядок директив VirtualHost важно; в нашем случае, если я вызываю веб-сервер без определенного имени хоста или имени хоста, который не настроен, я обслуживаю www-index, потому что это первая директива virthost.

# No Hostname given curl http://127.0.0.1/ <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html> # index-www curl -H "Host: www.example.com" http://127.0.0.1/ <html><body><h1>www.example.com</h1> This is the www.example.com index page. </body></html> # non-www index curl -H "Host: example.com" http://127.0.0.1/ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="http://www.example.com/">here</a>.</p> <hr> <address>Apache/2.2.22 (Ubuntu) Server at example.com Port 80</address> </body></html>

(Пожалуйста обратите внимание на использование переменной заголовка хоста -H)

Чтобы иметь в виду, что для работы NameVirtualHosting необходимо правильно настроить веб-сервер и веб-клиент.

Надеюсь, мои инструкции может помочь вам решить вашу проблему.

0
ответ дан 24 July 2018 в 17:06

Другие вопросы по тегам:

Похожие вопросы: