Tôi có cấu hình Apache2 sau:
000-default.conf
<VirtualHost _default_:80>
RewriteEngine on
RewriteRule ^ https://example.com [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
RewriteEngine on
RewriteRule ^ https://example.com [END,NE,R=permanent]
</VirtualHost>
</IfModule>
ví dụ.com.conf
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^(.*)$ https://example.com$1 [END,NE,R]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
<IfModule mpm_itk_module>
AssignUserId someuser someuser
</IfModule>
<Directory /something>
<Files "wsgi.py">
Require all granted
</Files>
</Directory>
WSGIDaemonProcess example.com python-path=/something:/something/python3.9/site-packages socket-user=someuser user=someuser group=someuser
WSGIProcessGroup example.com
WSGIScriptAlias / /something/wsgi.py
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>
Mục tiêu của tôi là có những điều sau đây (trong đó /XXX
là bất kỳ con đường nào):
https://example.com/XXX -> phục vụ bởi WSGI
https://example.com/XXX -> chuyển hướng đến https://example.com/XXX
bất cứ điều gì khác -> chuyển hướng đến https://example.com
Ngoài ra, tôi thậm chí còn hạnh phúc hơn với còn gì nữa không
chỉ cung cấp HTTP 404 hoặc HTTP 403.
Tuy nhiên, cấu hình này mang lại kết quả như sau (giả sử địa chỉ IP công cộng là 1.2.3.4):
http://1.2.3.4/XXX -> chuyển hướng đến https://example.com (OK)
https://1.2.3.4/XXX -> phân phát bởi WSGI (SAI)
http://example.com/XXX -> chuyển hướng đến https://example.com (SAI)
https://example.com/XXX -> phục vụ bởi WSGI (OK)
Tại sao các chuyển hướng hoạt động như hiện tại? Làm thế nào tôi có thể sửa chữa nó?