在不重定向的情况下将子域重写到子目录

时间:2013-06-20 16:50:05

标签: .htaccess url-rewriting

我想创建虚拟子域 像:

user1.domain.com/anythging >> domain.com/users/user1/anything

没有重定向

我在htaccess中使用这个cdoe:

RewriteEngine on
DirectorySlash off
RewriteBase /
        RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com.*$ [NC]
        RewriteRule ^(.*)$ http://domain.com/users/%1/$1 [P,L,NC,QSA]

但是当我使用时:     DirectorySlash关闭 我可以改写:     user1.domain.com/anythging/>> domain.com/users/user1/anything

末尾用斜杠(/)(anythging /), 但是这个

user1.domain.com/anythging >> error 403: Forbidden
                              You don't have permission to access /users/user1/anythging on this server. 

在第二种情况下,当我使用时:

DirectorySlash ON

这样:

user1.domain.com/anythging >> redirects to >> domain.com/users/user1/anythging

但是我想重写链接而不是重定向它!

知道问题在哪里?

2 个答案:

答案 0 :(得分:1)

不确定为什么DirectorySlash不适合您,但您并不需要它来实现您想要的效果。这个.htaccess也可以。我假设您想要删除任何尾随斜杠。

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*?)/?$ http://domain.com/users/%1/$1 [L]

此外,不需要代理[P],查询字符串追加[QSA](默认打开)和无案例[NC](因为,重写正则表达式只包含通配符)。

答案 1 :(得分:1)

我找到了解决方案:

RewriteEngine on
DirectorySlash off
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.([^\.]*)\.domain\.com$ [NC]
RewriteRule (.*) http://%1.domain.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] 
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*?)/?$ http://domain.com/users/%1/$1/ [P]

可能需要进行一些清理才能将所有www链接重定向到非www并从子域重写中排除www.domain.com

相关问题