apache mod为子域重写

时间:2012-07-16 19:54:11

标签: apache mod-rewrite webserver

在我的网络服务器上,我有一个位于example.com/site的网站(/var/www/site)。

我希望通过site.example.com访问它,我知道我需要使用mod-rewrite来启用它。

我可以使用简洁的代码段吗?我需要使其可扩展,以便其他网站也可以这种方式访问​​。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果这是一个特定子域的问题:site,那么您应该只显式重写一个子域:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L]

第二个条件阻止了内部重写循环并使您的URI看起来像/site/site/site/site/site/site/等......

这将放在文档根目录中的.htaccess文件中,/var/www/

如果你真的想任意重定向任何子域名,可以试试这个:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]*)\.example\.com$ [NC]
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)[^:]*:\1 [NC]
RewriteRule ^(.*)$ /%1/$1 [L]

这里,第二个条件用于相同的目的,它尝试确保请求URI不以来自主机的子域匹配开始。有关更好的解释,请参阅https://stackoverflow.com/a/11508430/851273

答案 1 :(得分:1)

首先,您需要将服务器配置为接受域example.com的任何子域,并将其重定向到您必须接受任何子域的虚拟主机。之后,您可以使用以下规则在内部将该子域重写为具有相同名称的文件夹:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteRule ^ %1%{REQUEST_URI} [L]