将特殊子域重写为特殊脚本并将所有子域重写为脚本

将特殊子域重写为特殊脚本并将所有子域重写为脚本

问题描述:

我无法为我的.htaccess文件创建脚本。将特殊子域重写为特殊脚本并将所有子域重写为脚本

我想下面重复写:

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

是任何人都擅长此道?几次尝试使用Error 500或简单地没有任何get参数的索引页(index.php只是print_r($ _ GET))后,我失败了。

谢谢

+0

请显示您的尝试 – Gerben 2012-03-05 14:41:57

感谢@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); ?> 

并且每个测试运行都完美无缺!

+0

只是一些测试结果:'admin.domain.tld - > Array([mode] => admin)'和'asdf.domain.tld - > Array([show] => asdf)' – Maddis 2012-03-06 05:02:51

我自己没有测试过,但它应该工作。

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,他将不会被重定向到外部。让我知道如果这是你想要的。

+0

您可能需要将'R = 301'标志添加到其他规则中。没有这个,重定向会在服务器端静静地发生。有了它,它会传回客户端,以便客户端浏览器知道重定向;它可以缓存它,并在将来自动执行 – TerryE 2012-03-05 12:15:22

+0

嗯,这不完全是我正在寻找的,但一个好的开始 - 谢谢你。 我确实希望它是无声的。浏览器显示:'admin.domain.tld' - >服务器端:'domain.tld/admin.php'或者浏览器:'(anyotherdomain),我们可能会有点不确定,我会尝试做一个更好的例子: .domain.tld' - >服务器:'domain.tld/index.php?show =(anyotherdomain)' 所以我基本上只是想让这些域更加“容易理解”,所以没有丑陋的index.php ?show = XXXXX,但是一个XXXXX.domain.tld。但线索是,我想要一些特殊的脚本,我可以定义一些“保留”子域,例如。 admin.php – Maddis 2012-03-06 00:35:54

+0

现在测试!!!!! – undone 2012-03-06 02:00:44