将特殊子域重写为特殊脚本,并将catch-all-subdomains重写为脚本

时间:2012-03-05 03:55:37

标签: php .htaccess mod-rewrite subdomain wildcard-subdomain

我无法为.htaccess文件创建脚本。

我想要以下重写:

  • www.domain.tld -> domain.tld(没问题)
  • admin.domain.tld/(.*) -> domain.tld/?show=admin$1
  • (everyothersubdomain).domain.tld -> domain.tld/?show=everyothersubdomain(我为此创建了一个通配符子域)

有人擅长这个吗?我在使用Error 500进行多次尝试后失败了,或者只是没有任何get参数的indexpage(index.php只是print_r($ _ GET))。

由于

2 个答案:

答案 0 :(得分:1)

我自己没有测试过,但它应该可行。

RewriteCond  %{QUERY_STRING}  show=(.*)
RewriteRule  ^(index\.php|)$   http://%1.domain.tld  [R=301,L]
RewriteRule ^(admin|special1|special2)\.php    http://$1.domain.tld [R=301,L]
RewriteCond %{HTTP_HOST} ^(admin|special1|special2)\.domain\.tld$  [NC]
RewriteRule (.*) http://domain.tld/%1.php [L,NC,QSA]

RewriteCond %{HTTP_HOST}  www\.domain\.tld  [NC]
RewriteRule (.*)  http://domain.tld/$1  [L,R=301,QSA]

RewriteCond  %{HTTP_HOST}  ^(.*)\.domain\.tld$
RewriteRule (.*)  http://domain.tld/?show=%1[L,NC,QSA]

如果用户在浏览器中输入http://domain.tld/admin.php,则会将其重定向到http://admin.domain.tld。但如果他进入http://admin.domain.tld,他就不会被重定向到外部。如果这是你想要的,请告诉我。

答案 1 :(得分:0)

感谢@Death我为自己想出了这个解决方案:

RewriteCond %{HTTP_HOST} ^(admin|special1|special2)\.domain\.tld$  [NC]
RewriteRule (.*) index.php?mode=%1 [L,NC,QSA]

RewriteCond %{HTTP_HOST}  www\.domain\.tld  [NC]
RewriteRule (.*)  http://domain.tld/$1  [L,R=301,QSA]

RewriteCond  %{HTTP_HOST}  ^(.*)\.domain\.tld$
RewriteRule (.*)  index.php?show=%1 [L,NC,QSA]

我使用index.php进行了一些测试运行,这只是:

<?php print_r($_GET); ?>

每次测试运行都很完美!