ฉันมีการกำหนดค่า Apache2 ต่อไปนี้:
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>
ตัวอย่าง.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>
เป้าหมายของฉันคือมีสิ่งต่อไปนี้ (ที่ /XXX
เป็นเส้นทางใดก็ได้):
https://example.com/XXX -> ให้บริการโดย WSGI
https://example.com/XXX -> เปลี่ยนเส้นทางไปที่ https://example.com/XXX
อย่างอื่น -> เปลี่ยนเส้นทางไปที่ https://example.com
อีกทางเลือกหนึ่ง ฉันจะมีความสุขมากยิ่งขึ้นด้วย อย่างอื่น
เพียงแค่ให้ HTTP 404 หรือ HTTP 403
อย่างไรก็ตาม การกำหนดค่านี้ให้ผลลัพธ์ต่อไปนี้ (สมมติว่าที่อยู่ IP สาธารณะคือ 1.2.3.4):
http://1.2.3.4/XXX -> เปลี่ยนเส้นทางไปที่ https://example.com (ตกลง)
https://1.2.3.4/XXX -> ให้บริการโดย WSGI (ผิด)
http://example.com/XXX -> เปลี่ยนเส้นทางไปที่ https://example.com (ผิด)
https://example.com/XXX -> ให้บริการโดย WSGI (ตกลง)
เหตุใดการเปลี่ยนเส้นทางจึงทำงานเหมือนเดิม ฉันจะแก้ไขได้อย่างไร