【问题标题】:WordPress Redirection not working after Moving to Subdirectory移动到子目录后 WordPress 重定向不起作用
【发布时间】:2017-12-31 19:18:47
【问题描述】:

今天我将我的 wordpress 网站从根目录移动到同一域中的子目录。我将所有文件移动到新的子目录。我还从 Hosting cpanel 设置了 301 通配符重定向

301通配符重定向设置-

旧地址 - https://www.example.com

新地址 - https://www.example.com/blog/

当我直接访问像https://www.example.com/blog/this-is-a-post 这样的任何帖子时,它会显示正确的帖子而没有任何错误,但是当我打开没有“博客”字样的同一帖子时出现问题,即https://www.example.com/this-is-a-post 然后它也会显示正确的帖子而不是重定向发给https://www.example.com/blog/this-is-a-post

当我通过 Google 访问时,它只访问旧地址,即没有“博客”一词。

发生的另一件事是将https://www.example.com 重定向到https://www.example.com/blog,这也是我不想要的,因为我的主页有不同的 html 索引文件

Wordpress 仪表板中的 URL 设置 -

WordPress 地址 (URL) - https://www.example.com/blog

网站地址 (URL) - https://www.example.com/blog

.htaccess文件的内容:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

【问题讨论】:

  • 请包含您的.htaccess 文件的内容。 cPanel 重定向非常基本且容易出错,也可能将指令放置在错误的位置(如果您使用的是 WordPress)。
  • 是的,我添加了 .htaccess 文件的内容,在通过 cpanel /blog/ 添加 301 通配符重定向后会自动添加到其中
  • 您访问过/wp-admin/permalinks 页面吗?那个经常有帮助。您是否尝试过隐身模式进行测试?我觉得很好。您的浏览器中可能缓存了一些内容。
  • 访问 /wp-admin/permalinks/ 并再次点击保存。无论出于何种原因,这在过去对我有用。
  • 从根目录中删除wordpress的.htaccess和index.php文件并从cpanel中删除301重定向后..问题已修复。现在我在 roodex.com 有不同的欢迎页面,并且在 roodex,com/blog 有 wordpress 博客但是现在的问题是当通过谷歌搜索结果访问时谷歌显示旧的帖子 url 链接并在访​​问后显示“未找到”而不是重定向到新的网址。

标签: php wordpress .htaccess redirect http-status-code-301


【解决方案1】:

从根目录中删除wordpress的.htaccess和index.php文件并从cpanel中删除301重定向后..问题已修复。现在我在 roodex.com 有不同的欢迎页面,在 roodex,com/blog 有 wordpress 博客,但现在的问题是当通过谷歌搜索结果访问时,谷歌显示旧的帖子 url 链接,访问后显示“ Not Found”而不是重定向到新的 url。

假设您只从站点的根目录提供静态文件(即,您没有虚拟 URL 和 WordPress 之类的前端控制器),那么您能做的最好的事情就是重定向对根目录的任何请求(在/blog) 不映射到物理文件,映射到您的 /blog 子目录,并希望最好。如果 WordPress 中也不存在 URL,那么您只会得到 WordPress 的 404 页面。

我假设您在处理 WordPress 请求的 /blog 子目录中有一个 .htaccess 文件?

所以,在您站点根目录中的.htaccess 文件(我相信现在是空的),尝试以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !blog/ /blog%{REQUEST_URI} [R=302,L]

当您确定一切正常时,将302(临时)重定向更改为301(永久)。 301 被浏览器硬缓存,因此会使测试出现问题。

【讨论】:

  • 是的,它开始重定向。如果我在根目录中安装另一个 php 脚本或登录页面或另一个 wordpress cms,它会产生问题吗?
  • 如果您安装使用前端控制器类型模式的脚本(其中所有不存在/虚拟 URL 都被重写为处理路由的脚本),这将导致问题 - 这几乎包括所有CMS。因为您将无法盲目地将所有不存在的 URL 重定向到您的 /blog 子目录。但是,如果您的 CMS 允许,您或许可以使用 CMS 的 404(不是 .htaccess)进行重定向。或者,您可以单独重定向所有旧 URL,除非有特定的 模式 指向旧 URL(这将允许您创建单个规则)。
  • 如果这回答了您的问题,那么请通过选中左侧的绿色对勾来接受上述答案。您还可以为您认为有用的答案投票。非常感谢,谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-03-09
  • 2012-10-22
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多