我有一台服务器,应该将所有流量重定向到非 WWW、HTTPS 页面,例如 https://website.com 但并非所有流量都会被重定向。
我期望什么以及我得到什么?
为了重定向,我在 etc/apache2/sites-available 中使用以下 Apache2 .conf 文件:
front.conf
<VirtualHost *:80>
ServerName website.com
ServerAlias www.website.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.website.com [OR]
RewriteCond %{SERVER_NAME} =website.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
# RewriteCond %{HTTPS} off [OR]
# RewriteCond %{HTTP_HOST} ^www\. [NC]
# RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
# RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
front-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName website.com
ServerAlias www.website.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine On
# Too many redirects
# RewriteCond %{HTTP_HOST} ^www\. [NC]
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Include /etc/letsencrypt/...
SSLCertificateFile /etc/letsencrypt/...
SSLCertificateKeyFile /etc/letsencrypt/...
</VirtualHost>
</IfModule>
我还尝试了注释的 RewriteCond/-Rule,但没有任何结果导致预期的行为。我错过了什么重要的事情吗?我花了很长时间寻找不同的方法,但似乎没有什么能按照我需要的方式工作。
提前致谢。
您似乎正在尝试配置 Apache 将所有流量重定向到非 www HTTPS 页面。您的 Apache 配置看起来大部分是正确的,但可能存在一些问题。这里有一些建议:
独立的非 WWW 和 WWW 虚拟主机: 不要将非 www 和 www 配置组合在同一个 VirtualHost 块中,而是为非 www 和 www 版本创建单独的 VirtualHost 块。这可以帮助避免冲突。
<VirtualHost *:80>
ServerName website.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/...
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ServerName www.website.com
Redirect 301 / https://website.com/
</VirtualHost>
以类似方式调整 SSL VirtualHost。
SSL 重定向: 在 SSL VirtualHost 中,您可能需要包含单独的重定向规则,以确保所有请求都重定向到非 www 版本。您可以使用不同的方法进行 HTTPS 重定向。
<VirtualHost *:443>
ServerName website.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Include /etc/letsencrypt/...
SSLCertificateFile /etc/letsencrypt/...
SSLCertificateKeyFile /etc/letsencrypt/...
</VirtualHost>
确保在 SSL VirtualHost 中禁用注释掉的重定向规则。
检查配置: 进行更改后,请确保重新启动 Apache 以应用新配置。
sudo service apache2 restart
清除浏览器缓存: 有时,浏览器会缓存重定向。清除浏览器缓存或尝试在新的隐身/私人窗口中确保您看不到缓存的结果。
检查其他配置文件: 确保其他 Apache 文件中没有冲突的配置,例如
.htaccess
文件或 Apache 设置中包含的其他配置文件。
进行这些调整后,您的 Apache 配置应按预期将所有流量重定向到非 www HTTPS 版本。