2009-09-04 75 views
2

我使用Apache 2.2与mod_rewrite。mod_rewrite重定向到URL与propietary协议

有没有办法强制mod_rewrite重写整个URL,包括协议?我知道,如果重定向包含http://在开始的时候会自动重写整个URL,但我想重定向到使用专有协议的URL:fcp://

当我将它添加为重定向它只是重定向到我与重写服务器的URL追加像这样:

http://www.example.com/fcp://@mailstaff.... 

我可以配置模块对待fcp://作为一个完整的URL,所以我不运行这个?

UPDATE:这里是我使用的代码:

RewriteCond ${externals:$2|Unknown} !Unknown 
RewriteRule ^(internal|external)/(.*)/? ${externals:$2} [R=301,NE,L,NS] 

里面的externals RewriteMap指令,我有这样一行:

firstclass-email  fcp://@mailstaff.example.com/ 

当我去了触发重写规则去:

http://example.com/internal/firstclass-email 

它会increcrec TLY重定向我在这里:

http://example.com/fcp://@mailstaff.example.com/ 

如果我更改协议的一部分从fcp://http://,Apache会意识到这是一个绝对的URL和正常工作。我希望Apache认识到fcp://也应该是绝对的。

回答

2

阿帕奇只能处理最常见的URL方案,如:httphttpsftpmailto等自定义URL方案无法识别本身,而是作为一个URL路径处理。

有关支持哪些方案的详细信息,请参阅source code of mod_rewrite.c中的is_absolute_uri函数。

+1

这就是我所担心的:(有什么方法可以在用户空间中更改它吗 – matpie 2009-09-04 21:01:33

+2

尝试使用处理重定向而不是Apache的脚本 – Gumbo 2009-09-04 21:15:23

+0

“Apache只能处理...” - 严格来说,它是* mod_rewrite *只能处理最常见的URL方案,其他模块(如mod_alias:'Redirect' /'RedirectMatch')似乎是“处理”它们。 – DocRoot 2017-08-08 20:47:17

0

你试过吗?

RewriteRule ^/yourUrl$ fcp://otherUrl [RL] 
+0

这不是回答的问题。但无论如何,你有没有尝试过吗? – Gumbo 2009-09-04 18:50:15

+0

还没有尝试过,但这是我的建议。你看到有什么问题吗? – 2009-09-04 18:57:22

+0

我把它作为一个问题/答案提出,因为他没有列出他目前使用的RewriteRule。 – 2009-09-04 19:00:06

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