mod_rewrite使用专有协议重定向到URL

时间:2009-09-04 18:01:56

标签: apache .htaccess mod-rewrite

我正在使用带有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://也应该是绝对的。

4 个答案:

答案 0 :(得分:2)

Apache只能处理最常见的网址方案,例如httphttpsftpmailto等。自定义网址方案不会被识别,但会被处理为一个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