2010-11-06 60 views
1

我到处搜索了这个答案,并且已发布的答案不符合我的具体情况,因为它给了我404错误,我不确定为什么。在mod_rewrite中保留双斜杠

我想改写这个:/c.php?url=http://www.example.com

进入这个:/c/http://www.example.com

现在我有这个在我的mod_rewrite:

RewriteEngine on 
RewriteRule ^c/(.*)(/)?$ /c.php?url=$1 

但是,当重写URL,我想发送到PHP脚本,它写入“http:/example.com”,用一个斜杠而不是双斜线。

我见过很多涉及THE_REQUEST规则的事情,但是当我尝试将它们应用到我的htaccess文件时,它们失败了。我不确定有什么不对,任何帮助将不胜感激。

回答

2

Apache在路径中删除多个斜杠。正如你已经提到的,你可以通过检查请求行中THE_REQUEST解决这个问题:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /c/([^?\ ]+)/? 
RewriteRule ^c/ /c.php?url=%1 
+0

谢谢,浓汤。我必须在/ c /([^?\] +)/?中添加+允许多个字符,但它运作良好,虽然我是mod_rewrite的新手,但我很难尝试译解THE_REQUEST命令是如何工作的...... 另外,有什么方法可以在URL中保留问号那还在发送? 谢谢! – boomboom 2010-11-08 00:41:56

+0

@boomboom:* \ _REQUEST *代表[请求行](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1)。如果你想获得完整的请求路径和查询字符串,直接从'$ _SERVER ['REQUEST_URI']'从* c.php *中获取它可能会更容易。 – Gumbo 2010-11-08 06:39:17