在我的网络服务器上,我有一个位于example.com/site
的网站(/var/www/site
)。
我希望通过site.example.com
访问它,我知道我需要使用mod-rewrite来启用它。
我可以使用简洁的代码段吗?我需要使其可扩展,以便其他网站也可以这种方式访问。提前谢谢。
答案 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]