我正在使用 Apache 2.2 和 mod_rewrite。
有没有办法强制 mod_rewrite 重写整个 URL,包括协议(protocol)?我知道如果重定向开头包含 http://
,它会自动重写整个 URL,但我尝试重定向到使用专有协议(protocol)的 URL:fcp://
当我将其添加为重定向时,它只会重定向到我的服务器的 URL,并附加重写,如下所示:
http://www.example.com/fcp://@mailstaff....
我可以配置模块将 fcp://
视为完整 URL,这样我就不会遇到这种情况吗?
更新:这是我正在使用的代码:
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/
如果我将协议(protocol)部分从 fcp://
更改为 http://
,Apache 将意识到它是绝对 URL 并正常工作。我希望 Apache 认识到 fcp://
也应该是绝对的。
最佳答案
Apache 只能处理最常见的 URL 方案,例如 http
、https
、ftp
、mailto
等. 自定义 URL 方案不会被识别,而是作为 URL 路径处理。
请参阅 source code of mod_rewrite.c 中的 is_absolute_uri
函数了解支持哪些方案的详细信息。
关于apache - mod_rewrite 使用专有协议(protocol)重定向到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380711/