好吧,我想知道有人向我解释一下,如果可能的话,我怎么能管理一个托管,让两个域指向它。
我的purpouse有两个文件夹,并使用 htaccess 进行管理。
我在 Hostinguer 中有两个托管域,现在我想知道如何才能使 htaccess只允许一个文件夹到一个域而另一个域文件夹到另一个域,并将其带到所有目录,因为现在,我可以通过这两个域访问我的网页,我想知道如何解决它。
我的第一次尝试就是:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www|)\.domain\.com$ [NC]
RewriteRule ^ - [F]
我或多或少知道什么是每件事,有一点正则表达和一些说明,说明它是如何工作的。
让我们在PHP中说出类似的内容:
if($_SERVER['SERVER_NAME'] == "www.domain.com") //There is an regex I know
exit; //Or, in this case throw a 403 error.
但是,例如,我不知道如何将此操作应用于所有子目录,从而避免每个文件夹中的每两个.htaccess使用两到三行。
而且,它没有像我预期的那样工作,因为如果我从我的domain.com访问它会给我一个403错误,而且,如果我从它访问它会给我一个403错误我的子域名:http://ikillnukes.hol.es/fapi(我会让它一直运行以证明它)
注意:我无法访问Apache,因此,不建议我创建虚拟主机,因为我不能。 ; - )
修改
我现在有:
domain1.com,domain2.com和sub.domain1.com
那些文件夹:
root
domain1 //This is created by me
sub //This is automatically created by Hostinger, and I can't change the name or the path
domain2 //This is created by me
所以,做@Walf给我的建议有什么问题,但是我有子域的问题而且提供给我的.htaccess @Walf有点难以理解(我的错),所以,什么我可以试试吗?
所以,任何帮助我解释如何处理这个问题都会很棒!
提前致谢!
答案 0 :(得分:1)
您的问题可能是重复的,但我找不到使用相邻目录的问题(我认为您正在描述),也不会找到我自己使用的解决方案。在根.htaccess
中尝试此操作:
RewriteEngine on
# capture the original request so you never have trouble with (un)escaping
RewriteCond %{THE_REQUEST} \S+\s+(\S*)
RewriteRule ^ - [E=REQ:%1]
# ensure the domain goes to a dir with the same name (ignoring www)
# get domain
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)
# see if first dir in url doesn't match domain
RewriteCond %1 =!^(?>([^|]+)\|\1)$
# capture first dir (if any) to check against above conditions and pass through as new url if not prefixed with domain dir
RewriteRule ^[^/]* %1%{ENV:REQ} [NE,DPI,PT]
您的目录结构将是
docroot/
domain1.com/
whatever
domain2.net/
whatever
.htaccess
如果愿意,您应该能够在每个子目录中拥有正常的.htaccess
指令。确保在这些目录中使用RewriteBase /
。
重新编辑这会让您的情况更像其他人一样'。
RewriteEngine on
RewriteBase /
# capture the original request so you never have trouble with (un)escaping
RewriteCond %{THE_REQUEST} \S+\s+(\S*)
RewriteRule ^ - [E=REQ:%1]
# ensure the domain goes to the required dir
# get domain
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)
RewriteRule ^ - [E=DOM:%1]
# explicitly set dir per host
RewriteCond %{ENV:DOM} =sub.domain1.com [NC]
RewriteRule !^sub/ sub%{ENV:REQ} [NE,DPI,L]
RewriteCond %{ENV:DOM} =domain2.com [NC]
RewriteRule !^d2/ d2%{ENV:REQ} [NE,DPI,L]
# allow domain1.com to proceed to root (any other rules go below)
# rules must still exclude subdirectories for other domains, e.g.:
RewriteRule ^(?!sub/|d2/)([^/]+)/([^/.]+)$ foo.php?bar=$1&baz=$2 [NE,B,L,DPI]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(?:sub/|d2/|index\.php$) index.php [L,DPI]
# after all other rules, emulate DirectorySlash so that Apache does not naively insert hidden directory into public URL
DirectorySlash off
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (?>.*)(?<!/) %{ENV:REQ}/ [L,DPI,R]
如果您不确定任何正则表达式,请将其粘贴到regex101.com(关闭g
标志)并查看说明。