Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess文件,用于将域重定向到子文件夹_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache .htaccess文件,用于将域重定向到子文件夹

Apache .htaccess文件,用于将域重定向到子文件夹,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我的web服务器中有几个指向同一documentroot的域。 让我们调用此/public文件夹 然后我在这个公用文件夹中有4个文件夹 public/domain1.com public/domain2.com public/domain3.com public/domain4.com 我需要一个.htaccess文件,用于将请求重定向到与url中的域匹配的子文件夹,因此如果访问者访问domain1.com,web服务器应从public/domain1.com加载文件 我不想将.htacc

我的web服务器中有几个指向同一documentroot的域。 让我们调用此
/public
文件夹 然后我在这个公用文件夹中有4个文件夹

  • public/domain1.com
  • public/domain2.com
  • public/domain3.com
  • public/domain4.com
我需要一个
.htaccess
文件,用于将请求重定向到与url中的域匹配的子文件夹,因此如果访问者访问
domain1.com
,web服务器应从
public/domain1.com
加载文件

  • 我不想将.htaccess文件放入每个文件夹/域。在
    public\u html
  • 我不想每次购买一个域名并将其重定向到Web服务器时都将域名添加到.htaccess文件中。它应该动态工作
简而言之,我想买一个域名,在公共文件夹中创建一个名为
domain.com
的文件夹。一旦我将我的dns重定向到我的服务器,它将从相应的文件夹开始工作,而无需任何其他工作。

我还强烈建议使用虚拟主机进行此类设置。但您的具体问题是关于动态重写,以将请求的主机名(在您的问题中称为“域”)映射到文件夹。这将为您指明正确的方向:

RewriteEngine on
RequestCond %{REQUST_URI} !^/public/
RewriteRule ^ /public/%{HTTP_HOST}%{REQUEST_URI} [QSA,END]
您还可以为文件夹添加一个测试,该测试将允许一个特殊的错误文档:

RewriteEngine on

RequestCond /public/%{HTTP_HOST} !-d
RewriteRule ^ /error_host_not_found.php

RequestCond %{REQUST_URI} !^/public/
RewriteRule ^ /public/%{HTTP_HOST}%{REQUEST_URI} [QSA,END]
如果您使用上述规则收到一个内部服务器错误(http状态500),那么很可能您操作的是非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到不支持的
[END]
标志的明确提示。您可以尝试升级或使用较旧的
[L]
标志,在这种情况下可能也会使用相同的标志,不过这取决于您的设置

此实现将在http服务器主机配置或分布式配置文件(“.htaccess”文件)中同样工作。显然,重写模块需要在http服务器中加载,并在http主机中启用。在使用分布式配置文件的情况下,您需要注意在主机配置中启用该文件的解释,并且该文件位于主机的
DOCUMENT\u ROOT
文件夹中


还有一个一般性的注释:您应该总是更喜欢将这些规则放在http服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实降低了http服务器的速度。只有在您无法访问真正的http服务器主机配置(读:真正廉价的服务提供商)或坚持编写自己的规则的应用程序(这显然是一个安全噩梦)的情况下,才提供它们作为最后一个选项

为什么不直接使用虚拟主机配置?这就是他们的目的。看看这个,它可以帮助你我同意,一个正确的vhosts设置似乎是一个更容易和更好的解决方案。htaccess。你可以阅读更多关于vhost的信息。如果可能的话,我想使用.htaccess,因为我不想每次将域重定向到服务器时都编辑/创建任何文件。似乎我必须为vhost中我不想编辑的每个域编辑conf文件。我希望它是动态的,如果可能的话。可能会帮助你解决你的问题。然而,我的观点仍然成立——Vhosts是一个更好、更容易的解决方案。