【问题标题】:Redirect www to non-www and prevent 301 for 404 Errorpage将 www 重定向到非 www 并防止 301 出现 404 Errorpage
【发布时间】:2013-09-24 16:32:32
【问题描述】:

我在使用 htaccess 时遇到问题,希望有人可以帮助我: 我在/wordpress 目录中有一个wordpress 安装。所以如果有人访问“www.mysite.com”或“mysite.com”我想重定向到/wordpress

我在服务器上一些网站,例如/deleted.html 所以我添加了一个 404-Errorpage: ErrorDocument 404 /wordpress/404.php 。 如果您访问 mysite.com/deleted.html,则所有内容都适用于 404 页面,但如果您访问 www.mysite.com/deleted.html,则无法正常工作。 在这种情况下,首先会出现 301 重定向,然后会加载 404 页面。这对 Google 来说是个问题,因为他们无法检测到该页面已被删除。 看起来是这样的:

curl -I -L http://www.mysite.com/deleted.html

HTTP/1.1 301 Moved Permanently
Date: Tue, 24 Sep 2013 16:02:18 GMT
Server: Apache/2.2.25 (Unix)
Location: http://mysite.com/deleted.html
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 404 Not Found
Date: Tue, 24 Sep 2013 16:02:18 GMT
Server: Apache/2.2.25 (Unix)
X-Powered-By: PHP/5.2.17
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
X-UA-Compatible: IE=edge,chrome=1
Content-Type: text/html; charset=UTF-8

这是我的 .htaccess

ErrorDocument 404 /wordpress/404.php

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$
RewriteRule ^(/)?$ wordpress 
RewriteCond %{HTTP_HOST} ^(www.)?mysite.net$
RewriteRule ^(/)?$ wordpress 

感谢您提供的任何帮助。

【问题讨论】:

  • 这是因为permalink WP 中的设置。最好总是首先将所有内容重定向到配置的 WP http://mysite.com
  • 你是对的。永久链接设置是问题所在。我现在通过为 Errorpage 创建一个静态 html 文件来解决它,并将元重定向到我的 wordpress 404 页面。 <meta http-equiv="refresh" content="0; url=http://mysite.com/wordpress/404.php"> 但是现在用户可以看到一秒钟的静态页面,然后发生重定向。所以要正确地做到这一点,我需要解决永久链接问题..
  • 这更像是一个黑客解决方案。让我在我的回答中给你一些建议,如果你愿意,可以使用它。

标签: wordpress apache .htaccess redirect


【解决方案1】:

将此代码放入您的 .htaccess 中:

ErrorDocument 404 /wordpress/404.php

RewriteEngine On

# first redirect everything to http://mysite.com/net, recognized by WP permalink
RewriteCond %{HTTP_HOST} ^www\.(mysite\.(?:net|com))$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

# forward everything to wordpress folder
RewriteCond %{HTTP_HOST} ^mysite\.(com|net)$
RewriteRule ^$ wordpress [L]

【讨论】:

  • 我的解决方案使用元重定向mysite.com/deleted.htmlwww.mysite.com/deleted.htmlmysite.com/wordpress/deleted.html 仅返回 404,但对于 www.mysite.com/wordpress/deleted.html,我首先得到 301,然后是 404
  • 按照建议的上述规则,www.mysite.com/wordpress/deleted.html 将首先重定向到mysite.com/wordpress/deleted.html (301),然后 404 将由/wordpress/404.php 处理。不需要deleted.html
  • 只是为了说清楚。 deleted.html 是已删除的文件。它在服务器上不存在,因此应该显示 404 页面。问题是,如果例如Google 检查www.mysite.com/wordpress/deleted.html 是否存在,服务器将首先返回 301,然后返回 404,如 curl 的输出所示。所以谷歌仍然会认为文件存在,尽管它被删除了。这就是我想避免从 www 重定向的原因。如果文件不存在,则为非 www。
  • 如果任何搜索机器人得到 404,它不会认为该文件存在(301 在这里无关)
  • 不幸的是,情况并非如此。如果我在网站管理员工具中使用“Fetch as Google”,它会为不存在的网址返回“成功”。例如http://www.mysite.com/noexistent000.html 与您的 htaccess 但与我的解决方案使用元重定向它显示“未找到”。
猜你喜欢
  • 2018-05-01
  • 2017-05-03
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多