本地主机上的 Mod_rewrite 无法加载页面

问题描述 投票:0回答:1

我正在尝试设置

.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 服务器。除了页面无法加载之外,我没有看到任何错误日志。

感谢您的宝贵时间。

linux .htaccess mod-rewrite apache2
1个回答
0
投票

您可以按照您的尝试在分布式配置文件中实现此类重写规则,但这是一种有问题的方法。原因如下:

  • 此类文件效率低下,它们确实会减慢http服务器的速度。
  • 此类文件增加了复杂性,难以调试。
  • 您的设置中不需要这样做。

相反,您应该阅读 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]

© www.soinside.com 2019 - 2024. All rights reserved.