将每个子域重定向到单个目录

时间:2019-06-07 12:52:33

标签: apache .htaccess subdomain

这与.htaccess rewrite subdomain to directory

几乎相同

此解决方案有效:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^([^.]+)\.jcubic\.atthost24\.pl$
RewriteRule ^((?!subdomains/).*)$ /subdomains/%1/$1 [L,NC,QSA]

但是我想转发但没有/ subdomains目录,所以

http://img.jcubic.atthost24.pl/.*应该读为http://jcubic.atthost24.pl/img/.*

这可能吗?这不起作用

RewriteRule ^((?!%1/).*)$ /%1/$1 [L,NC,QSA]

我不确定我拥有的Apache版本。

1 个答案:

答案 0 :(得分:1)

这可能就是您要寻找的:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^img\.jcubic\.atthost24\.pl$
RewriteRule ^/?(.*)/?$ /img/$1 [END,QSA]

但是请注意,您应该尝试将此类规则放置在http服务器的主机配置中,而不要使用动态配置文件(“ .htaccess”)。

以上规则在两种情况下均适用。

如果遇到内部错误(http状态为500),请检查错误日志文件。如果它抱怨未知的END标志,那么您可能正在运行apache http服务器的非常旧的版本。在这种情况下,请尝试使用L标志,尽管实际上取决于具体情况,但它在这里应保持相同的工作方式。

更新,根据您的评论:

如果要以动态方式处理主机名“ img”,则可以执行以下操作:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.]+)\.jcubic\.atthost24\.pl$
RewriteRule ^/?(.*)/?$ /%1/$1 [END,QSA]

也许您想添加一个检查,以确定该文件夹是否实际存在于http服务器的物理文件系统中。