我正在使用带有mod_rewrite的Apache 2.2。
有没有办法强制mod_rewrite重写整个URL,包括协议?我知道如果重定向在开头包含http://
,它会自动重写整个网址,但我正在尝试重定向到使用专有协议的网址:fcp://
当我将其作为重定向添加时,它只是重定向到我的服务器的URL,并附加重写,如下所示:
http://www.example.com/fcp://@mailstaff....
我是否可以将模块配置为将fcp://
视为完整网址,以便我不参与其中?
更新:以下是我正在使用的代码:
RewriteCond ${externals:$2|Unknown} !Unknown
RewriteRule ^(internal|external)/(.*)/? ${externals:$2} [R=301,NE,L,NS]
在externals
RewriteMap中,我有这样的一行:
firstclass-email fcp://@mailstaff.example.com/
当我通过转到:
来触发RewriteRule时http://example.com/internal/firstclass-email
它会错误地将我重定向到这里:
http://example.com/fcp://@mailstaff.example.com/
如果我将协议部分从fcp://
更改为http://
,Apache将意识到它是一个绝对的URL并且正常工作。我希望Apache能够识别fcp://
也应该是绝对的。
答案 0 :(得分:2)
Apache只能处理最常见的网址方案,例如http
,https
,ftp
,mailto
等。自定义网址方案不会被识别,但会被处理为一个URL路径。
有关支持哪些方案的详细信息,请参阅source code of mod_rewrite.c中的is_absolute_uri
函数。
答案 1 :(得分:2)
您可以使用RedirectMatch
代替RewriteRule
。
检查How to handle mod-rewrite with a custom url scheme?以获取解释...
答案 2 :(得分:0)
你试过这个吗?
RewriteRule ^/yourUrl$ fcp://otherUrl [RL]
答案 3 :(得分:0)
相当陈旧的问题 - 但我可以回答。我有同样的问题。这可以通过两个重定向来解决。
Redirect /restore1 fcp://example.com/restore
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego).+mobile.....
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|.....
RewriteRule ^restore/(.*)$ http://example.com/restore1/$1