【问题标题】:htaccess internal rewrite across domains?htaccess 跨域内部重写?
【发布时间】:2010-07-09 03:08:02
【问题描述】:

我正在尝试在我的虚拟主机(mediatemple)上将一个子文件夹从一个域指向另一个域。我想使用内部重写,而不是 301 重定向。这是目标

http://www.clientdomain.com/blog/$1 --> http://www.mydomain.com/wpmu/clientdomain/$1

在服务器端,结构如下:

/x/y/z/domains/clientdomain.com/html/blog/ -- htaccess file is here
/x/y/z/domains/mydomain.com/html/wpmu/ -- wpmu installation

到目前为止,我只在 301 重定向方面取得了成功,但我的目标是掩盖一些事情,以便 wpmu 可以在不透露其位置的情况下为客户的博客提供动力。这是我的工作 301 重定向:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/blog/
RewriteRule ^(.*)$ http://www.mydomain.com/wpmu/clientdomain/$1 [NC]

有没有一种简单的方法可以将其转换为内部重写?除了 301 重定向之外,我什么都没看到……

提前致谢,

凯西

【问题讨论】:

  • 您是否尝试过使用绝对文件系统路径而不是 URI?
  • 我还没有成功;指定的文件系统路径是否与 htaccess 中的 URI 不同?当我在 RewriteCond 中使用 %{PATH_INFO} 时,匹配失败。
  • 文件系统路径不起作用,因为 mod_rewrite 不会低于 ${DOCUMENTROOT}
  • .htaccess 中指定的规则似乎就是这种情况,因为mod_rewrite 将请求发送到 Apache 内部重定向处理程序,该处理程序显然将其解析为 URL(我无法准确定位有时候是这样的)。虽然在服务器上下文中 (httpd.conf),但源代码建议绝对(可访问)文件路径也应该工作。 (对于好奇的人来说,这纯粹是补充信息;对于您的具体问题,我认为您的解决方案是通过 .htaccess 单独工作的唯一方法,除非现有别名指令)

标签: apache .htaccess mod-rewrite


【解决方案1】:

据我所知,实现跨虚拟域重写的唯一方法是使用域之间的符号链接来欺骗 mod_rewrite 使其认为它正在执行内部重写

【讨论】:

    【解决方案2】:

    你正在做的内部重写。

    对于 301 重定向,您必须编写 [L,R=301]:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/blog/
    RewriteRule ^(.*)$ http://www.mydomain.com/wpmu/clientdomain/$1 [L,R=301]
    

    【讨论】:

    • www.mydomain.com 不是执行RewriteRule 的域,因此他拥有的规则将按照他的指定执行外部重定向。
    • 啊,好的,现在我明白了。那么唯一不泄露真实 URI 的方法就是充当代理。例如,请参阅 mod_proxy:httpd.apache.org/docs/1.3/mod/mod_proxy.html 或在文件系统上使用符号链接 ln -s /x/y/z/domains/clientdomain.com/html/blog/ /x/y/z/domains/mydomain.com/html/wpmu / 应该有帮助
    • 我最终使用了符号链接,跨域重写不起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2015-05-21
    • 2012-10-29
    • 2011-02-04
    相关资源
    最近更新 更多