我正在尝试将任何具有非空REQUEST_URI的URL重写到另一个域,同时保留REQUEST_URI。我们的想法是,只有www.example.com存在于此域名中,而任何其他请求都应该发送到www.example2.com。
我已经确认www.example.com的'/'为REQUEST_URI。
e.g。
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指出这一点。
答案 0 :(得分:2)
我认为你第一次尝试几乎是好的,你只需要否定这样的重写条件:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.+)$ http://www.example2.com/$1 [L,QSA,R=301]
答案 1 :(得分:2)
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.+)$ http://www.example2.com/$1 [R,L,QSA]
如果没有!
,您的RewriteCond
是积极的匹配,而不是消极的。
此外,添加R
标志以强制apache向浏览器发送重定向