0

On my webserver, I have one website located at example.com/site (in /var/www/site).

I want it to be accessed through site.example.com, and I'm aware I need to use mod-rewrite to enable this.

Is there a concise snippet I can use to do this? I need to make it extensible so other sites can be accessed this way as well. Thanks in advance.

4

2 回答 2

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

于 2012-07-16T20:38:15.863 回答
1

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

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteRule ^ %1%{REQUEST_URI} [L]
于 2012-07-16T19:56:58.247 回答