apache - mod_rewrite 使用专有协议(protocol)重定向到 URL

标签 apache .htaccess mod-rewrite

我正在使用 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 方案,例如 httphttpsftpmailto 等. 自定义 URL 方案不会被识别,而是作为 URL 路径处理。

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

关于apache - mod_rewrite 使用专有协议(protocol)重定向到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380711/

相关文章:

php - 重写一个链接,mod_rewrite

debugging - 除了使用浏览器之外,是否有更好的方法来测试或调试 Mod 重写规则?

javascript - 获取状态为 0

php - AH01630 : client denied by server configuration for files named dhtxxxx. xxx

Apache:url 中的 %25(400 错误请求)

wordpress - 域名自动指向 HTTPS 而不是 HTTP 我没有 SSL 证书

php - htaccess - 在子文件夹中安装 Symfony2

php - Apache Mod_Rewrite 不断重定向

python - 无法通过 apache/httpd 从外部 IP 地址访问第二个 flask 服务器

.htaccess 带有查询参数的永久重定向