0

我正在尝试将具有非空 REQUEST_URI 的任何 URL 重写到另一个域,同时保留 REQUEST_URI。这个想法是这个域上只存在 www.example.com,任何其他请求都应该转到 www.example2.com。

我已验证 www.example.com 的 REQUEST_URI 为“/”。

例如

www.example.com -> should not be rewritten
www.example.com/test.php -> should be rewritten to www.example2.com/test.php
www.example.com/test2.php?id=123 -> should be rewritten to www.example2.com/test2.php?id=123

[更新] 我尝试将 REQUEST_URI 与“/”进行比较,但这会重定向所有内容:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.+)$ http://www.example2.com/$1 [L,QSA]

我试图检查文件或目录是否存在然后重定向它,但这甚至重定向了基本页面(www.example.com)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example2.com/$1 [L,QSA]

我试图检查斜杠后是否有内容,但没有重定向:

RewriteEngine on
RewriteRule ^.+/(.+)$ http://www.example2.com/$1 [L,QSA]

任何人都可以提出一个可行的解决方案吗?看起来它应该很简单,但我似乎无法让它工作。

谢谢。

解决方案:

仅供参考:我最终采用的解决方案是:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example2.com/$1 [R,L,QSA]

原因是如果我在 www.example.com 上有任何图像,它们将被重写为 www.example2.com。[R] 是使基本 URL 重定向问题正常工作的原因。感谢 poncha 指出了这一点。

4

2 回答 2

2

我认为你第一次尝试几乎是好的,你只需要像这样否定重写条件:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.+)$ http://www.example2.com/$1 [L,QSA,R=301]
于 2012-08-05T14:51:21.270 回答
2
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.+)$ http://www.example2.com/$1 [R,L,QSA]

没有!, yourRewriteCond是正匹配,而不是负匹配。此外,添加R了强制 apache 向浏览器发送重定向的标志

于 2012-08-05T14:51:37.773 回答