Внутри 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>
Чтобы решить вашу проблему, вы должны понимать концепцию «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 необходимо правильно настроить веб-сервер и веб-клиент.
Надеюсь, мои инструкции может помочь вам решить вашу проблему.
Чтобы решить вашу проблему, вы должны понимать концепцию «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 необходимо правильно настроить веб-сервер и веб-клиент.
Надеюсь, мои инструкции может помочь вам решить вашу проблему.