【问题标题】:Proxy sub domains without redirect in .htaccess.htaccess 中没有重定向的代理子域
【发布时间】:2013-02-18 19:27:56
【问题描述】:

需要将发送到例如子域 auto.domain.int 的请求重定向到 www.domain.int/doc/sample-rates。这是一个 Zend 应用程序,因此使用了 MVC。我的 .htaccess conf 中有以下内容:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^auto\.domain\.int$
RewriteRule ^.*$ /doc/sample-rates [PT,L]

问题是,当我将一个真实文件的名称放在文件系统上作为 RewriteRule 替换时,可以说是“script.php”,一切正常。在 auto.domain.int 主机名下提供的 script.php 文件的内容。

另一方面,当我将 MVC 路由作为 RewriteRule 替换时,我从 apache 收到 500 错误,用于 '/doc/sample-rates' 路径和 400 错误,用于 'http://www.domain.int/doc/sample-rates' 路径和 apache 日志中的几行:

127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d75058/initial] (3) [perdir /var/www/domain /base/www.domain.com/htdocs/] 去除每个目录前缀:/var/www/domain/base/www.domain.com/htdocs/ -> 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d75058/initial] (3) [perdir /var/www/domain /base/www.domain.com/htdocs/] 将模式 '^.*$' 应用于 uri '' 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d75058/initial] (2) [perdir /var/www/domain /base/www.domain.com/htdocs/] 重写 '' -> '/doc/sample-rates' 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d75058/initial] (2) [perdir /var/www/domain /base/www.domain.com/htdocs/] 强制“/do​​c/sample-rates”传递到下一个 API URI-to-filename 处理程序 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d75058/initial] (1) [perdir /var/www/domain /base/www.domain.com/htdocs/] 内部重定向与 /doc/sample-rates [内部重定向] 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (3) [perdir /var /www/domain/base/www.domain.com/htdocs/] 添加路径信息后缀:/var/www/domain/base/www.domain.com/htdocs/doc -> /var/www/domain/base/ www.domain.com/htdocs/doc/sample-rates 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (3) [perdir /var /www/domain/base/www.domain.com/htdocs/] 去除每个目录前缀:/var/www/domain/base/www.domain.com/htdocs/doc/sample-rates -> doc/sample-费率 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (3) [perdir /var /www/domain/base/www.domain.com/htdocs/] 将模式 '^.*$' 应用于 uri 'doc/sample-rates' 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (2) [perdir /var /www/domain/base/www.domain.com/htdocs/] 重写 'doc/sample-rates' -> '/doc/sample-rates' 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (2) [perdir /var /www/domain/base/www.domain.com/htdocs/] 强制“/do​​c/sample-rates”传递到下一个 API URI-to-filename 处理程序 127.0.0.1 - - [04/Mar/2013:10:50:19 --0500] [auto.domain.int/sid#b73cd9d8][rid#b6d67018/initial/redir#1] (1) [perdir /var /www/domain/base/www.domain.com/htdocs/] 内部重定向与 /doc/sample-rates [内部重定向]


更新:auto.domain.int 是使用 ServerAlias 的“主”www.domain.int 的别名。



谢谢,
尤金

【问题讨论】:

    标签: apache .htaccess proxy subdomain


    【解决方案1】:

    您必须添加一个额外的RewriteCond 以防止无休止的重写

    RewriteCond %{HTTP_HOST} ^auto\.domain\.int$
    RewriteCond %{REQUEST_URI} !^/doc/sample-rates$
    RewriteRule ^.*$ /doc/sample-rates [PT,L]
    

    【讨论】:

    • 谢谢,Olaf,但第一个没有太大帮助,第二个是我不想使用的重定向。
    • @ladjack “没有多大帮助”是什么意思?行为是否完全相同?有什么变化吗?
    • 嗯,是的,不断收到“请求超出 10 个内部重定向的限制”错误消息...
    • @ladjack 这在我的测试环境中运行良好。可能有其他规则导致此重定向。 /doc/sample-rates 是真实的文件或目录吗?还是有一些规则或别名转发到另一个位置?
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2016-02-12
    • 2019-01-14
    • 2019-10-13
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多