.htaccess localhost上的Mod_rewrite不加载页面

stszievb  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(65)

我正在尝试设置.local域,并将我的localhost请求重定向到相应的文件夹。当前文件夹如下所示:
文档根目录(localhost)= /home/user/www/,项目= /home/user/www/project1/
我访问像localhost/project1这样的项目。
现在我尝试为我的localhost设置域。我在/etc/hosts中添加了dev.local127.0.0.1可以工作并重定向到localhost。现在我想访问像project1.dev.localproject1.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.localproject1.dev.local .
是的,我已经为这里的每个更改启用了FollowSymLinks,Allowance并重新启动了Apache服务器。除了页面不加载外,我没有看到任何错误日志。
感谢您抽出宝贵的时间。

nwsw7zdq

nwsw7zdq1#

您可以在分布式配置文件(“.htaccess”)中实现这样的重写规则,但这是一种有问题的方法。原因如下:

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

相反,您应该了解apache http服务器提供的“基于名称的虚拟主机”特性:https://httpd.apache.org/docs/current/vhosts/
您可以在http服务器的中央配置中为每个项目定义一个这样的虚拟主机。您可以使用ServerName指令为每个项目分配一个名称,并使用DOCUMENT_ROOT指令为该特定主机打算发布的资源所在的文件系统的一部分分配一个名称。这种方法还允许为不同的项目进行不同的设置,这显然对开发有意义。
查看文档了解更多细节和指令。作为典型的开源软件,它具有出色的质量,并附带了很好的示例。
如果你仍然想使用重写,例如因为你有大量的这样的项目几乎相同,并希望保存几行的工作来定义所有这些虚拟主机,那么你仍然想在http服务器的默认主机的中心配置中实现这些指令,而不是在一个 * 分布式 * 配置文件中实现这些指令。
这可能会给你指明正确的方向:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www)?\.([^.])+\.dev\.local$
RewriteCond %{REQUEST_URI} !^/%2
RewriteRule ^ /%2/%{REQUEST_URI} [L]

相关问题