2009-11-08 101 views
0

我试图创建一个重写规则,将做到以下几点:mod_rewrite的以 “http://”,在查询字符串

http://www.example.com/http://other.example.comhttp://www.example.com/index.php?var=http://google.com

这是我目前的规则:

RewriteCond %{REQUEST_URI} ^/(http[s]?\:\/\/|ftp\:\/\/)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|gov|ws|info)$ 
RewriteRule ^(.*)$ http://www.example.com/index.php?var=$1 [R] 

主要生产:

http://www.example.com/http://google.comhttp://www.example.com/index.php?var=http:/google.com

无论我怎么努力,我总是得到http:/出来,而不是http://。有任何想法吗?

回答

0

Apache删除空路径段,如http://中的那个。所以/foo//bar///被解释为像/foo/bar/。但THE_REQUEST原始请求行保持不变:

RewriteCond %{THE_REQUEST} ^GET\ /(https?://[^\ ]+) 
RewriteRule ^https?:/ /index.php?var=%1 [R] 
+0

非常好!这正是我所需要的。但现在我有另一个问题... 是否有可能做这个相同的程序没有做[R]。理想情况下,我希望地址栏中的实际地址保持为http://domain.com/http://google.com 我尝试了[L]和[PT]标志未成功。我收到服务器错误。 谢谢! – paperreduction 2009-11-09 01:52:26

+0

@paperreduction:只留下* R *标志,它应该起作用。 – Gumbo 2009-11-09 07:54:37

+0

@Gumbo:谢谢,但我怀疑我有冲突的重定向规则(也做www R301)。因此,关闭[R]仍然导致服务器错误。我会解决它。空洞的路径解释解决了我的许多问题。 – paperreduction 2009-11-09 12:42:23