子域的apache mod重写

子域的apache mod重写,apache,mod-rewrite,webserver,Apache,Mod Rewrite,Webserver,在我的Web服务器上,我有一个网站位于example.com/site(位于/var/www/site) 我想通过site.example.com访问它,我知道我需要使用mod rewrite来启用它 有没有一个简明的片段可以用来做这件事?我需要使其可扩展,以便其他网站也可以通过这种方式访问。提前感谢。首先,您需要将服务器配置为接受域example.com的任何子域,并将其重定向到必须接受任何子域的虚拟主机。之后,您可以使用以下规则在内部将该子域重写为具有相同名称的文件夹: RewriteEng

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

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


有没有一个简明的片段可以用来做这件事?我需要使其可扩展,以便其他网站也可以通过这种方式访问。提前感谢。

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

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

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

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

如果这是一个特定子域的问题:
站点
,则应明确重写该子域:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L]
第二个条件防止内部重写循环,并使URI看起来像
/site/site/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不以来自主机的子域匹配开始。请参阅以获得更好的解释。

如果这是一个特定子域的问题:
站点
,则应明确重写该子域:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L]
第二个条件防止内部重写循环,并使URI看起来像
/site/site/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不以来自主机的子域匹配开始。请参阅以获得更好的解释。

谢谢,关于第一部分,这将涉及到什么?此外,此代码段将转到何处?这些规则将导致内部重写循环。我的意思是,您可以在VirtualHost中设置此重写脚本。如果您想将任何子域指向此VirtualHost,您可以将ServerAlias设置为*.domain.tldThanks,关于第一部分,这将涉及到什么?此外,此代码段将转到何处?这些规则将导致内部重写循环。我的意思是,您可以在VirtualHost中设置此重写脚本。如果您想将任何子域指向这个虚拟主机,您可以将ServerAlias设置为*.domain。tldSimon的答案可以放在站点主根目录下的.htaccess文件中。例如,在/var/www或/var/www/site?我假设是/var/www/site(你可以通过将垃圾放入.htaccess来测试这一点,在浏览该网站时,你应该会得到500个错误)。好的,我很快会尝试。Thanksimon的答案可以放在网站主根目录下的.htaccess文件中。例如,在/var/www或/var/www/site?我假设是/var/www/site(你可以通过将垃圾放入.htaccess来测试这一点,当你浏览网站时,应该会出现500个错误).Ok,我很快就会尝试。THanksI尝试了第一种方法,使用/var/www中的.htaccess。但到目前为止,site.example.com直接指向example.com根目录…我尝试了第一种方法,使用/var/www中的.htaccess。但到目前为止,site.example.com直接指向example.com根目录。。。