![虛擬主機 apache 配置中的重定向永久行為不符合預期](https://rvso.com/image/762117/%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%20apache%20%E9%85%8D%E7%BD%AE%E4%B8%AD%E7%9A%84%E9%87%8D%E5%AE%9A%E5%90%91%E6%B0%B8%E4%B9%85%E8%A1%8C%E7%82%BA%E4%B8%8D%E7%AC%A6%E5%90%88%E9%A0%90%E6%9C%9F.png)
我有多個網域指向同一個 IP。如果且僅當頁面不存在時,RedirectPermanent 適用於所有網域,並且我得到了網站的 404 預設頁面。如果我在瀏覽器中輸入實際存在的頁面,則重定向不起作用,因為我可以從指向該 IP 的所有網域存取該頁面。
因此,如果我輸入網址domaintoredirect1.com/page/not/existing,我會得到domainiwant.com/page/not/existing(重定向工作正常)
如果我輸入domaintoredirect1.com/page/existing,我不會得到任何重定向,而且網址仍然是domaintoredirect1.com/page/existing
為什麼會發生這種情況?
我還想將 www 重定向到網域的非 www 版本,但在這種情況下重定向也不起作用:我得到兩個版本但沒有重定向。
我還想重定向另一個網域擴充(.org 到 .com),並將 www 重定向到該網域的非 www 版本,但重定向在這些情況下也不起作用:我正在 www...org和notwww...org 而不重定向到notwww...com。
在最後的情況下,我檢查了有 www 和沒有 www 的網域都註冊了 A 記錄(這可能是原因嗎?)。在其他情況下(domainsiwanttoredirect),www 版本註冊為 CNAME,我只能造訪 www 版本(非 www 版本被重定向到 www 版本)。
這是虛擬主機配置在可用網站中找到
<VirtualHost *:80>
ServerName www.domaintoredirect1.com
ServerAlias domaintoredirect1.com
Redirect permanent "/" "https://domainiwant.com/en/about-us/domaintoredirect1/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.domaintoredirect2.com
ServerAlias domaintoredirect.com
Redirect permanent "/" "https://domainiwant.com/en/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.domainiwant.org
ServerAlias domainiwant.org
Redirect permanent "/" "https://domainiwant.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.domainiwant.com
Redirect permanent "/" "https://domainiwant.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName domainiwant.com
Redirect permanent "/" "https://domainiwant.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName default
DocumentRoot /var/www/html
<Location />
Require all denied
</Location>
</VirtualHost>
我正在添加ssl_設定檔也
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName website-ws.domainIwant.com
SSLCertificateFile /etc/ssl/certs/domainIwant.com.22092020.pem
SSLCertificateKeyFile /etc/ssl/private/domainIwant-com.key
SSLCipherSuite stuff...
SSLProtocol stuff...
SSLCipherSuite stuff...
#SSLProxyEngine on
<Location />
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# AllowOverride All
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName www.domainToRedirect1.com
ServerAlias domainToRedirect1.com
SSLCertificateFile /etc/ssl/certs/domainToRedirect1.crt
SSLCertificateKeyFile /etc/ssl/private/nginx_kmdevel.key
SSLCipherSuite stuff
SSLProtocol stuff
SSLCipherSuite stuff
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# AllowOverride All
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName www.domainIwant.com
SSLCertificateFile /etc/ssl/certs/domainIwant.com.22092020.pem
SSLCertificateKeyFile /etc/ssl/private/domainIwant-com.key
SSLCipherSuite stuff
SSLProtocol stuff
SSLCipherSuite stuff
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# AllowOverride All
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName domainIwant.com
SSLCertificateFile /etc/ssl/certs/domainIwant.com.22092020.pem
SSLCertificateKeyFile /etc/ssl/private/domainIwant-com.key
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
SSLProtocol -all +TLSv1.3 +TLSv1.2 +TLSv1.1
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA256 EECDH+aRSA+SHA256 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# AllowOverride All
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName www.domainIwant.it
ServerAlias domainIwant.it
SSLCertificateFile /etc/ssl/certs/domainIwant.it.2020.pem
SSLCertificateKeyFile /etc/ssl/private/domainIwant_2020.key
</VirtualHost>
<VirtualHost *:443>
ServerName www.domainToRedirect2.com
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias domainToRedirect2.com
SSLCertificateFile /etc/letsencrypt/live/www.domainToRedirect2.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domainToRedirect2.com/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# AllowOverride All
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName rcs.domainIwant.com
SSLCertificateFile /etc/ssl/certs/domainIwant.com.22092020.pem
SSLCertificateKeyFile /etc/ssl/private/domainIwant-com.key
SSLCipherSuite stuff
SSLProtocol stuff
SSLCipherSuite stuff
</VirtualHost>
</IfModule>
我究竟做錯了什麼?
我也想問什麼伺服器名稱預設意思是,因為在 apache_conf 檔案中我沒有找到任何對 a 的引用,我正在複製阿帕契配置文件也
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf