htaccess只有在没有提供参数时才将一个域重定向到另一个域?

时间:2012-08-26 22:22:17

标签: php linux apache .htaccess

我有一个域oldexample.com,我想只在没有给出参数的情况下将访问该域的用户重定向到newexample.com。在域提供参数的情况下,它应该重定向到其他地方 - 因此,oldexample.com/?id=5不应该重定向到newexample.com,而是我想将它重定向到newexample.com中的某个内部目录,比如说到newexample.com/dir/5。

以下是我希望重定向如何工作的摘要:

oldexample.com -> newexample.com
oldexample.com/?id=3 -> newexample.com/dir/3
oldexample.com/index.php?id=6 -> newexample.com/dir/6

那么我如何在htaccess中编写RewriteRules来完成这项工作呢?

1 个答案:

答案 0 :(得分:2)

尝试:

RewriteEngine On

# for /
RewriteCond %{HTTP_HOST} ^oldexample.com$ [NC]
RewriteCond %{QUERY_STRING} !id=
RewriteRule ^$ http://newexample.com/ [L,R=301]

# for /?id=###
RewriteCond %{HTTP_HOST} ^oldexample.com$ [NC]
RewriteCond %{QUERY_STRING} ^id=([0-9]+)
RewriteRule ^(index.php)?$ http://newexample.com/dir/%1? [L,R=301]

最后一条规则与//index.php匹配。这些规则必须位于oldexampl.com文档根目录中的htaccess文件中。