通配符子域和子文件夹作为.htaccess中的参数

时间:2013-09-10 04:45:24

标签: .htaccess url redirect mod-rewrite wildcard-subdomain

我有一个门户网站http://www.mysite.com/,其中客户注册并获得自己的网站子域版本来运行我的应用。 我已经设置了通配符子域DNS / VirtualHost等,并使其正常工作。

我想要设置的是我的htaccess文件,将通配符子域作为参数传递给应用程序,如下所示:

http://wildcardsubdomain.mysite.com/ -> http://www.mysite.com/app/?dj=wildcardsubdomain
http://wildcardsubdomain.mysite.com/?l=genres -> http://www.mysite.com/app/?dj=wildcardsubdomain&l=genres

我在http://www.mysite.com/

中的.htaccess文件中完成了此操作
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.mysite.com
RewriteCond %{HTTP_HOST} ^(.+).mysite.com
RewriteRule ^([^/]*)$ http://www.mysite.com/app/dj/%1 [P,L]

但我需要重定向管理员用户URL,如下所示,我已经遇到了在/ app目录中使用的htaccess代码。 我需要的是:

http://wildcardsubdomain.mysite.com/admin/?l=genres -> http://www.mysite.com/app/admin.php?dj=wildcardsubdomain&l=genres
http://wildcardsubdomain.mysite.com/admin/?l=users -> http://www.mysite.com/app/admin.php?dj=wildcardsubdomain&l=users

(l参数有所不同,我这里仅以用户和类型为例)

我在/app/.htaccess中尝试了这个,但它并没有真正起作用:

RewriteRule ^dj/([^/]+)/?$ $2?dj=$1 [QSA,L]
RewriteRule ^admin/([^/]+)/?$ admin.php$2?dj=$1 [QSA,L]

有人可以建议更好的重写规则吗? 非常感谢提前

1 个答案:

答案 0 :(得分:0)

您错过了QSA标记,否则l=genres会丢失。您只需要在其他规则之前使用“管理员”规则:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.mysite.com
RewriteCond %{HTTP_HOST} ^(.+).mysite.com
RewriteRule ^admin/?$ http://www.mysite.com/app/admin.php?dj=%1 [P,L,QSA]

RewriteCond %{HTTP_HOST} !^www\.mysite.com
RewriteCond %{HTTP_HOST} ^(.+).mysite.com
RewriteRule ^([^/]*)$ http://www.mysite.com/app/dj=%1 [P,L,QSA]