我正在尝试设置
.local
域并将我的本地主机请求重定向到相应的文件夹。目前该文件夹如下所示:
文档根目录(本地主机)=
/home/user/www/
,项目= /home/user/www/project1/
我访问类似
localhost/project1
的项目。
现在我正在尝试为我的本地主机设置域。我在
dev.local
中添加了 /etc/hosts
和 127.0.0.1
,它可以工作并重定向到本地主机。现在我想访问像 project1.dev.local
或 project1.local
这样的项目,并期望它重定向到 localhost/project1
。我将 .htaccess
文件放在文档根目录中,并放置以下代码:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.dev\.local [NC]
RewriteRule (.*).dev.local dev.local/%1 [R=301,L]
#RewriteRule ^([A-Za-z]+).local$ localhost/$1 [L,QSA]
如您所见,我一直在尝试这两种选择,但都不起作用。
.htaccess
被访问,当我在文件中放入垃圾时出现错误。当我尝试像 project1.local
或 project1.dev.local
. 时,我得到同样的错误(页面无法访问)
是的,我在这里为每个更改启用了 FollowSymLinks、AllowOverride 并重新启动了 Apache 服务器。除了页面无法加载之外,我没有看到任何错误日志。
感谢您的宝贵时间。
您可以按照您的尝试在分布式配置文件中实现此类重写规则,但这是一种有问题的方法。原因如下:
相反,您应该阅读 apache http 服务器提供的“基于名称的虚拟主机”功能:https://httpd.apache.org/docs/current/vhosts/
您可以在 http 服务器的中央配置中为每个项目定义一个这样的虚拟主机。您可以使用
ServerName
指令为每个文件分配一个名称,并为该特定主机要使用 DOCUMENT_ROOT
指令发布的资源所在的文件系统部分分配名称。这种方法还允许针对不同的项目进行不同的设置,这对于开发来说显然是有意义的。
请参阅文档了解更多详细信息和指令。作为典型的开源软件,它具有卓越的品质,并提供了很好的示例。
如果您仍然想为此使用重写,例如因为您有大量几乎相同的此类项目,并且希望节省几行代码来为所有这些项目定义虚拟主机,那么您仍然想要在 http 服务器默认主机的中央配置中实现这些指令,而不是在 distributed 配置文件中实现这些指令。 这可能会为您指明正确的方向:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www)?\.([^.])+\.dev\.local$
RewriteCond %{REQUEST_URI} !^/%2
RewriteRule ^ /%2/%{REQUEST_URI} [L]