Я испытываю затруднения из-за своей конфигурации Apache и не могу заставить это подавать мое основное веб-приложение, когда я ввожу URL, который включает WWW (https://www.example.com), но это хорошо работает, когда я не делаю (https://example.com).
Я попытался добавить отдельные строки:
ко всем VirtualHosts, но это не имело никакого значения.
От моих тестов я вижу, что перенаправления работают, но я могу только получить доступ к основному сайту через определенные URL:
Я задавался вопросом, мог ли кто-то помочь мне решить это так, я могу поразить свой mainsite от любого URL. Также я должен продемонстрировать этот сайт клиенту очень скоро, и борюсь за решение!
Вот моя конфигурация Apache:
000 значений по умолчанию conf
<VirtualHost *:80>
Alias /static /home/user/project_1/static
<Directory /home/user/project_1/static>
Require all granted
</Directory>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
значение-по-умолчанию-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /static /var/www/example.com/static
<Directory /home/user/project_1/static>
Require all granted
</Directory>
Alias /media /home/user/project_1/media
<Directory /home/user/project_1/media>
Require all granted
</Directory>
...
...
<Directory /home/user/project_1/mywebapp>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess user python-home=/home/user/project_1/env_mywebapp python-path=/home/user/project_.......
WSGIProcessGroup mywebapp
WSGIScriptAlias / /home/user/project_1/mywebapp/wsgi.py
ServerName example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
le-redirect-example.com.conf (Созданный позволяют нам зашифровать certbot),
<VirtualHost _default_:80>
ServerName example.com
ServerSignature Off
RewriteEngine On
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
ErrorLog /var/log/apache2/redirect.error.log
LogLevel warn
</VirtualHost>
Спасибо за помощь!
[ОБНОВЛЕНИЕ]
Вот вывод от выполнения команды "завихрение-I"
root@host1:~# curl -I www.example.com
HTTP/1.1 301 Moved Permanently
Date: Mon, 16 Apr 2018 18:23:20 GMT
Server: Apache/2.4.18 (Ubuntu)
Location: https://example.com/
Content-Type: text/html; charset=iso-8859-1
root@host1:~# curl -I example.com
HTTP/1.1 301 Moved Permanently
Date: Mon, 16 Apr 2018 18:24:31 GMT
Server: Apache/2.4.18 (Ubuntu)
Location: https://example.com/
Content-Type: text/html; charset=iso-8859-1
root@host1:~# curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 16 Apr 2018 18:25:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Vary: Cookie,Accept-Encoding
X-Frame-Options: SAMEORIGIN
Set-Cookie: csrftoken=zxxxxxxxxxxxxxxxxxxxxxzBcrBOvUDUdxxxxxxxxxxxxxxxx; expires=Mon, 15-Apr-2019 18:25:23 GMT; Max-Age=31449600; Path=/
Content-Type: text/html; charset=utf-8
root@host1:~# curl -I https://www.example.com
HTTP/1.1 200 OK
Date: Mon, 16 Apr 2018 18:26:15 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Tue, 03 Jan 2017 02:48:33 GMT
ETag: "1234-12347b43...."
Accept-Ranges: bytes
Content-Length: 11321
Vary: Accept-Encoding
Content-Type: text/html
У вас есть это в вашей конфигурации:
ServerName example.com
Это соответствует example.com, но не www.example.com. Это два разных имени. Если вы используете https (как и на основе конфигурации), вам также потребуется либо сертификат с несколькими именами, подстановочный знак или отдельные сертификаты для example.com и www.example.com.
Используйте ServerAlias www.example.com
, чтобы добавить псевдоним для ServerName. Это также задокументировано в превосходной документации Apache , которая должна быть первой остановкой, когда что-то не работает:
Когда приходит запрос, сервер найдет лучшее (большинство специфический) соответствующий аргумент, основанный на IP-адресе и порте, используемом запросом. Если существует более одного виртуального хоста, содержащего эту комбинацию адреса и порта с наилучшим соответствием, Apache будет дополнительно сравнивать директивы ServerName и ServerAlias с именем сервера, присутствующим в запросе.
BLOCKQUOTE>