使用htaccess

时间:2016-11-27 22:36:20

标签: php .htaccess mod-rewrite dns

好吧,我想知道有人向我解释一下,如果可能的话,我怎么能管理一个托管,让两个域指向它。

我的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有点难以理解(我的错),所以,什么我可以试试吗?

所以,任何帮助我解释如何处理这个问题都会很棒!

提前致谢!

1 个答案:

答案 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标志)并查看说明。