.htaccess 通过htaccess的子域屏蔽
已编辑 我在服务器上设置了一个通配符子域dns区域,希望每个子域使用.htaccess和mod rewrite加载/users/direcotry的内容 我希望浏览器栏中的URL保持不变,以便显示:.htaccess 通过htaccess的子域屏蔽,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,已编辑 我在服务器上设置了一个通配符子域dns区域,希望每个子域使用.htaccess和mod rewrite加载/users/direcotry的内容 我希望浏览器栏中的URL保持不变,以便显示: http://username.domian.com/../../ 在显示以下内容的同时: http://www.domain.com/users/username/../../ 此外,如果访问了URL的www版本,我想重定向(更改URL)到子域版本 我不太熟悉mod重写规则,任何帮助都将不胜感
http://username.domian.com/../../
在显示以下内容的同时:
http://www.domain.com/users/username/../../
此外,如果访问了URL的www版本,我想重定向(更改URL)到子域版本
我不太熟悉mod重写规则,任何帮助都将不胜感激
谢谢。试试这个:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteCond %1 !=www
RewriteRule ^(.*)$ http://www.domain.com/users/%1/$1 [R=302,L]
如果用户访问tom.domain.com/directory1/directory2/directory3/file.html
,他将被重定向到www.domain.com/users/tom/directory1/directory2/directory3/file.html
如果这不是您真正想要的(因为我对您的“蒙面”概念有点困惑),那么请更好地解释您的要求,以便我可以调整规则
更新: 要在浏览器中保持URL不变,请执行以下操作:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/users/
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteCond %1 !=www
RewriteRule ^(.*)$ /users/%1/$1 [L]
但是有一个问题:如果
directory1
将被称为users
(例如tom.domain.com/users/directory2/directory3/file.html
),那么这将不起作用——这是您为重写所付出的代价解决方案:将用户
重命名为独特的名称(例如用户(u dir_123_abc)
等--www.domain.com/users(u dir)123(u abc/tom/users/directory2/directory3/file.html
)。@dSquared查看更新的答案--我没有在实时服务器上测试过,但应该可以正常工作。感谢您提供更新的答案。当点击页面内的链接时,它会产生魅力;但是,当直接在浏览器中键入URL时,它会重定向到username.domain.com/users/username/。/../有什么想法吗?您还有什么其他规则?如果您只有这些规则,则不应重定向。加。。无论URL是键入的还是单击的,它都应该工作——所以这肯定是另一条规则。。或者出现一些自定义代码(听起来像是检查页面引用?),重写规则仅在URL在目录上有尾随斜杠时触发,而不是在没有斜杠时触发。在这两种情况下我怎么能让它都着火呢?所有其他规则都被注释掉了。如果有斜杠或没有斜杠,则规则本身不区分大小写,因此在这两种情况下都应该有效。但是无论如何--尝试添加这个指令DirectorySlash Off
(我假设您没有相反的指令)。