【问题标题】:.htaccess rewrite from subdirectory of domain to subdirectory of different domain.htaccess 从域的子目录重写到不同域的子目录
【发布时间】:2012-04-23 15:54:59
【问题描述】:

好的,我发现了一些与非常相似的问题相关的主题,但使用为我自己的网站提供的答案没有任何运气。基本上我有 2 个站点,映射如下:

/public_html/ - points to main domain (www.site1.com)
/public_html/site2.com - points to secondary domain (www.site2.com)
/public_html/portal - points to my target subdirectory

我正在尝试获取对 www.site2.com/portal 的所有请求以透明地加载 www.site1.com/portal,也就是说,我仍然希望 www.site2.com/portal 显示在地址栏中。

RewriteCond %{HTTP_HOST} ^(www\.)?site2\.com [NC]
RewriteCond %{REQUEST_URI} ^/portal/(.*)$
RewriteRule ^/(.*) /portal/$1 [L]

根本没用

RewriteCond %{HTTP_HOST} ^(www\.)?site2\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/portal/(.*)$
RewriteRule ^(.*)$ http://site1.com/portal/$1 [L]

带我去http://site1.com/portal/site2.com/portal。

这几天我一直在用头撞墙,任何帮助将不胜感激!

【问题讨论】:

  • 好的,#anubhava 显然有我需要的解决方案,如果我采用他的第一个解决方案并将代理标志更改为重定向标志,它可以完美运行,所以显然这是一个服务器配置问题

标签: .htaccess mod-rewrite


【解决方案1】:

除非您在 httpd.conf 中启用 mod_proxy,否则您当前的设置将不支持您尝试获取的内容。因此,您可以使用以下 2 个选项:

选项 1:启用 mod_proxy 并保留当前目录结构

把这段代码放在你的.htaccesspublic_html/site2.com目录下:

RewriteCond %{HTTP_HOST} ^(www\.)?site2\.com$ [NC]
RewriteRule ^(portal/.*)$ http://site1.com/$1 [L,NC,P]

选项 2:保留当前目录结构并创建一个符号链接,如下所示:

/path-to/public_html/site2.com/portal -> /path-to/public_html/portal

然后把这段代码放到你的.htaccesspublic_html/site2.com目录下:

Options +FollowSymLinks -MultiViews

恕我直言,选项 #2 对您来说会容易得多,因为它只需要创建一个符号链接(我相信您使用的是 *nix 的某种风格。

【讨论】:

  • 不幸的是,客户端站点位于共享主机上,我目前没有 shell 访问权限(如果我没记错的话,符号链接是必需的)。我有 mod_proxy,但是示例 1 抛出了 404。不过,谢谢你,它给了我一个新的开始测试的地方;) - 编辑:我忘记在第一次测试中打开重写引擎,现在我得到了 400错误
  • 您能否检查您的 error.log 以获取有关此 400 错误的匹配日志语句。
  • 我可用的错误日志仅记录 300 个错误:( 我现在正在尝试修复它
  • 您的浏览器发送了一个此服务器无法理解的请求。请求头字段的大小超过服务器限制。 X-Forwarded-Server
  • 这是我在浏览器中看到的
猜你喜欢
  • 2012-05-25
  • 2016-11-20
  • 1970-01-01
  • 2023-03-14
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
相关资源
最近更新 更多