我处于用户可以在子域中创建博客的情况。
用户将创建博客并输入他想要的地址,
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重写。我想知道的是,是否可以将通配符子域重定向到相应的目录。
答案 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]