【问题标题】:Apache redirect special cases with/without URL Replacement带有/不带有 URL 替换的 Apache 重定向特殊情况
【发布时间】:2014-10-13 23:48:55
【问题描述】:

关于项目:客户可以为其内容预订/预订非子域... 因此,如果您预订子域选项,您的内容会出现在 sub.example.com 上,如果您不预订此选项,则内容会出现在 example.com/sub 上,就像内容经常出现一样。我正在尝试通过以下重定向机制来实现这一点。

  1. 有人访问 sub.example.com
  2. 浏览器显示example.com/sub的内容
  3. 地址栏仍显示 sub.example.com
  4. 通过位于 sub.example.com 下的以下 .htaccess 实现

    RewriteEngine on
    RewriteCond %{REQUEST_URI} / [NC]
    RewriteRule ^(.*)$ http://example.com/sub [P]
    

example.com/sub 或 sub.example.com 上的所有链接都是绝对链接,所以如果我点击 sub.example.com 上的主徽标,我会被重定向到 example.com 并且浏览器栏会发生变化。如果我点击出现在 sub.example.com 上的文章,它会包含指向 example.com/article 的 href,因此我可以访问 example.com/article。

我的问题是:

  1. .htaccess 可以吗?
  2. 是否存在重复内容的问题?从搜索机器的角度来看,example.com/sub 和 sub.example.com 看起来是一样的。如何解决重复内容问题?
  3. 这种方法总体上是否聪明?如果没有,我如何才能达到我的要求?

【问题讨论】:

  • 使用P 标志几乎会自动将 3 的答案设为“否”。

标签: apache .htaccess redirect


【解决方案1】:
  1. 它们都在同一台服务器上吗?当目的地不在同一台服务器上时,通常使用 P 标志。否则,只需重写您的页面(见下文)。地址栏保持不变,但内容将被重定向。
  2. 可以通过向重写的页面添加元标记(规范)来解决重复的内容 => https://support.google.com/webmasters/answer/139066?hl=en
  3. 如果它们在同一台服务器上:否!

示例代码:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/sub [NC]
RewriteCond %{HTTP_HOST} ^sub\.example\.com [NC]
RewriteRule ^(.*)$ /sub/$1 [QSA,L]

【讨论】:

  • 有时 sub.example.com 指向 example.com 所在的同一 IP,有时它是不同的 IP。所以我只想要一个 .htaccess 一个 sub.example.com 不在 example.com 上。 Example.com 对其系统内容有自己的重写规则......所以你的 RewriteRules 并没有完全解决我打算解决的问题。
  • 您想解决什么问题?是您打算建立代理服务器吗?不过,您需要更改 example.com 根域中的 htaccess 或在 httpd.conf 中创建虚拟主机,以告诉网络服务器查看子文件夹。它永远不会自己看那里(他怎么会知道?)。我建议您将此代码放在根文件夹中(它仅适用于 sub.example.com-domain 并且不会触及您的根域),或者制作一个虚拟主机。然后,您可以使用类似您的代码代理到另一台服务器。
猜你喜欢
  • 1970-01-01
  • 2019-01-05
  • 2016-04-13
  • 2016-12-07
  • 1970-01-01
  • 2013-09-30
  • 2020-07-16
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多