1

我想创建虚拟子域,例如:

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 off 我可以重写: user1.domain.com/anythging/ >> domain.com/users/user1/anything

以斜线 (/) 结尾(anything/),但这

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

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

知道问题出在哪里吗?

4

2 回答 2

1

不知道为什么DirectorySlash不适合你,但你并不完全需要它来实现你想要的。这.htaccess也行。我假设您希望删除任何尾随斜杠(如果存在)。

RewriteEngine on
RewriteBase /

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

此外,不需要 proxy [P]、 query string append [QSA](默认启用)和 no-case [NC](因为重写正则表达式仅包含通配符)。

于 2013-06-20T18:18:02.273 回答
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 从子域重写中排除

于 2013-06-24T17:58:41.733 回答