使用 .htaccess 的 apache 虚拟主机站点无法正常工作
apache virtualhost site using .htaccess not working
我 运行 brew/apache 在本地 machine(mac-os 蒙特雷)。
我要配置虚拟hosts.
对其中一个虚拟 host (panierssaison.local) 的查找不起作用,在延迟几秒后以找不到服务器错误结束。
Apache 设置为侦听端口 8080,httpd.conf
中允许使用虚拟 hosts
这是 httpd-vhosts.conf 中有问题的 host 的配置:
<VirtualHost *:8080>
ServerAdmin eniac314@panierssaison.local
DocumentRoot "/Users/eniac314/Sites/paniersSaison"
ServerName panierssaison.local
ServerAlias www.panierssaison.local
ErrorLog "/opt/homebrew/var/log/httpd/panierssaison.local-error_log"
CustomLog "/opt/homebrew/var/log/httpd/panierssaison.local-access_log" common
<Directory "/Users/eniac314/Sites/paniersSaison">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
我像这样在hosts.conf中添加了虚拟hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost panierssaison.local laterreduchat.local murol.local
255.255.255.255 broadcasthost
::1 localhost
未加载的网站使用了 /Users/eniac314/Sites/paniersSaison 中的 .htaccess 文件,删除它后网站可以加载。
.htaccess相关规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
[..]
当 运行 httpd -S 所有虚拟 hosts 都被正确检测到时。
所以似乎在 hosts.conf 中添加带有 www 前缀的服务器别名解决了问题。
这是我的 hosts.conf 现在:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost panierssaison.local laterreduchat.local murol.local www.panierssaison.local www.laterreduchat.local www.murol.local
255.255.255.255 broadcasthost
::1 localhost
我认为 .htaccess 中有这条规则
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
正在将 www 前缀附加到 url,以防止 dns 匹配。
我 运行 brew/apache 在本地 machine(mac-os 蒙特雷)。
我要配置虚拟hosts.
对其中一个虚拟 host (panierssaison.local) 的查找不起作用,在延迟几秒后以找不到服务器错误结束。
Apache 设置为侦听端口 8080,httpd.conf
中允许使用虚拟 hosts这是 httpd-vhosts.conf 中有问题的 host 的配置:
<VirtualHost *:8080>
ServerAdmin eniac314@panierssaison.local
DocumentRoot "/Users/eniac314/Sites/paniersSaison"
ServerName panierssaison.local
ServerAlias www.panierssaison.local
ErrorLog "/opt/homebrew/var/log/httpd/panierssaison.local-error_log"
CustomLog "/opt/homebrew/var/log/httpd/panierssaison.local-access_log" common
<Directory "/Users/eniac314/Sites/paniersSaison">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
我像这样在hosts.conf中添加了虚拟hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost panierssaison.local laterreduchat.local murol.local
255.255.255.255 broadcasthost
::1 localhost
未加载的网站使用了 /Users/eniac314/Sites/paniersSaison 中的 .htaccess 文件,删除它后网站可以加载。
.htaccess相关规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
[..]
当 运行 httpd -S 所有虚拟 hosts 都被正确检测到时。
所以似乎在 hosts.conf 中添加带有 www 前缀的服务器别名解决了问题。
这是我的 hosts.conf 现在:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost panierssaison.local laterreduchat.local murol.local www.panierssaison.local www.laterreduchat.local www.murol.local
255.255.255.255 broadcasthost
::1 localhost
我认为 .htaccess 中有这条规则
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
正在将 www 前缀附加到 url,以防止 dns 匹配。