将所有子域重定向到文件

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

我有一个服务器,很多域名都指向它。因此,我需要一个通用的.htaccess规则,我需要创建一个.htaccess文件,将所有的子域重定向到其对应的子域文件夹。我需要创建一个.htaccess文件,重定向所有的子域到其对应的子域文件夹.这是否可能?谢谢。

例如,我有一个服务器,其中有许多域名。

http(s)://apple.domain1.com -> https://domain1.com/redir/apple/index..html

http(s)://orange.2domain.co.uk -> https://2domain.co.uk/redir/orange/index.asp

http(s)://banana.doma3n.org -> https://doma3n.org/redir/banana/index.php

apache .htaccess http web
1个回答
0
投票

好了,现在突然有三个问题了:-)

我真的不明白为什么你需要单独的文件夹。为什么不 一个 脚本来处理这些请求,而不管调用的是什么主机("子域")。脚本知道什么主机被调用,所以它可以采取相应的行动。

总之,你的问题是如何重写到单独的文件夹,所以这就是我的回答......

除了重写作为登陆页的主机,你还想配置你的默认主机(后备主机),这样它提供的东西才有意义。

总之,这应该能给你指出正确的方向。


首先,你需要配置你的 DirectoryIndex:

DirectoryIndex index.html
DirectoryIndex index.php
DirectoryIndex index.asp

更多细节和放置这些指令的位置请参考文档。https:/httpd.apache.orgdocs2.4modmod_dir.html。


其次,你需要重写传入的请求到内部目录。

RewriteEngine on

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REMOTE_ADDR} ^10\.
RewriteRule ^ /redir_internal [END]

RewriteCond %{HTTP_HOST} ^([^.]+)\.
RewriteCond -d %1
RewriteRule ^ /%1 [END]

RewriteRule ^ /something_that_acts_as_a_fallback

更多细节请参考文档。https:/httpd.apache.orgdocscurrentmodmod_rewrite.html。

这是一个很好的主意,开始时用302临时重定向,一旦你确定一切都正确设置后,才改成301永久重定向。这样可以防止在试运行时出现缓存问题......

如果你使用上面的规则收到了一个内部服务器错误(http状态500),那么很有可能你操作的是一个非常老版本的apache http服务器。你会看到一个明确的提示,即不支持的 [END] 在这种情况下,你的http服务器错误日志文件中的标志。你可以尝试升级或者使用旧的 [L] 标志,在这种情况下,它可能也会同样工作,尽管这取决于你的设置。

这个实现同样可以在http服务器主机配置或分布式配置文件(".htaccess "文件)中使用。显然,重写模块需要在http服务器中加载,并在http主机中启用。如果你使用分布式配置文件,你需要注意在主机配置中启用它的解释,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

还有一句话:你应该把这些规则放在http服务器的主机配置中,而不是使用分布式配置文件(".htaccess")。这些分布式配置文件增加了复杂性,经常会导致意外行为,很难调试,而且它们真的会拖慢 http 服务器的速度。它们只是作为最后的选择,在你无法访问真正的http服务器主机配置的情况下(阅读:非常便宜的服务提供商),或者对于坚持编写自己的规则的应用程序(这显然是一个安全噩梦)。

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