通配符URL子域重写到子目录

时间:2015-12-01 09:26:17

标签: .htaccess mod-rewrite url-rewriting

我处于用户可以在子域中创建博客的情况。

用户将创建博客并输入他想要的地址,

abcd.domain.com然后我的php代码创建了一个名为abcd的目录。

要查看博客,用户将在其浏览器中输入abcd.domain.com,我想要一个.htaccess代码,该代码将重写网址并打开domain.com/abcd内的文件 但对于用户,浏览器中的网址应保持abcd.domain.com

目前我正在尝试此代码

RewriteCond %{HTTP_HOST} ^test\.domain\.com$
RewriteCond %{REQUEST_URI} !^test/
RewriteRule ^(.*)$ /test/$1 [L,QSA]

但即使我在测试文件夹中有一个文件test.html并尝试查看该页面,这也给了我404。

同样在这种情况下,我将不得不手动更改.htaccess文件以进行URL重写。我想知道的是,是否可以将通配符子域重定向到相应的目录。

2 个答案:

答案 0 :(得分:2)

您可以使用:

RewriteCond %{HTTP_HOST} ^test\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^(.*)$ /test/$1 [L,QSA]
带领先REQUEST_URI

/

使用外卡子域:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/%1/
RewriteRule ^(.*)$ /%1/$1 [L,QSA]

答案 1 :(得分:1)

请注意,拥有通配符子域需要的不仅仅是重写规则。只是fyi。

您需要为子域创建wildcard DNS record,并通过在apache配置中使用ServerAlias *.domain.com来告诉apache使用任何子域请求。

然后以这种方式尝试你的规则,看看它是否适合你。

RewriteCond %{HTTP_HOST} ^((?!www).+)\.domain\.com$ [NC]
RewriteCond %1::%{REQUEST_URI} !^(.*?)::/\1/?
RewriteRule ^(.*)$ /%1/$1 [L,QSA]