我想创建虚拟子域 像:
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
但是我想重写链接而不是重定向它!
知道问题在哪里?
答案 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