2015-12-01 58 views
1

我处于用户可以在子域中创建其博客的情况。将子域通配符重写为子目录

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

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

查看博客用户将键入在他的浏览器abcd.domain.com,我想一个.htaccess代码将改写的URL,然后打开domain.com/abcd 里面的文件,但用户在浏览器的URL应该保持abcd.domain.com

目前我想这个代码

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

但是这给了我404,即使我有test文件夹中的文件test.html并试图查看该页面。

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

回答

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] 
+0

虽然代码的第一部分解决了测试文件夹的404,但通配符的第二部分不起作用。当我尝试使用第二个.htaccess代码重新加载与第一个代码一起工作的相同url时,我收到错误消息msg –

+0

'Not Found 请求的URL /test/test/redirect:/test/test/test.html/redirect: /test/test/test.html/redirect:/test/test/test.html/redirect:/test/test/test.html/test.html/test.html/redirect:/test/test/test.html/在此服务器上找不到test.html/test.html/redirect:/test/test/test.html/。 –

+0

您只使用第二部分? (并删除测试部分) – Croises

1

注意,它需要比重写规则更加有通配符子域。只是fyi。

您需要为子域创建一个wildcard DNS record,并通过在Apache配置中使用ServerAlias的来告诉apache使用任何子域请求。

然后试试你的规则,看看它是否适合你。

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

我已经有'wildcard DNS active' –

+0

好吧......你试过规则吗? –

+0

试过你的代码,给出了500错误。 :( –