【问题标题】:Rewrite rule for wordpress site installed in subdirectory (not a multisite)为安装在子目录(不是多站点)中的 wordpress 站点重写规则
【发布时间】:2017-04-27 12:20:47
【问题描述】:

我从需要工作的服务器上复制了一个 wordpress 站点,并将其设置在 localhost 上,wordpress 文件夹设置为 root 的子目录。

我唯一的问题是我的链接重定向到根目录而不是 wpfolder,例如。并且文件路径中没有 wpfolder 名称。

例子:

ht.p://localhost/wpfolder/wp-content/themes/tbt/_inc/js/functions.js

应该是:

ht.p://localhost/root/wpfolder/wp-content/themes/tbt/_inc/js/functions.js

我已遵循 codex https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory#Using_a_pre-existing_subdirectory_install 中的所有说明,并且一切正常,除了我一直在努力让我的链接和文件重定向到正确的文件路径。

我已按此顺序保存了常规设置、刷新了永久链接并重新启动了服务器。我还确认正在读取 htaccess 并且正在读取数据库,并且 wp-admin 中的所有帖子都可以正常读取。

令人困惑的是,即使服务器上的原始站点在子目录中安装了 wp,我也看不到它是如何重定向的。本地副本的站点结构如下:

/localhost/site_root/wpfolder

和原创:

user@domain/public_html/wpfolder

导出数据库时我设置的地址如下:

网站地址
远程://www.domain.com, local: //localhost/siteroot/

WP 地址 远程:/home/siteuser/public_html, 本地:/siteroot/wpfolder (我不明白为什么这不指向原始站点上的子目录?)

远程根目录下的htaccess:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} /order-online/order-now/ 
RewriteRule ^(.*)$ https://www.sitename.com.au/order-online/order-now/$1 [R,L]


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

# END WordPress

在迁移数据库并在 wp-admin 中保存所有设置后自动写入根目录下的本地 htaccess:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} /order-online/order-now/ 
RewriteRule ^(.*)$ https://www.originalsitedomain.com/order-online/order-now/$1 [R,L]


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

# END WordPress

我在根目录下的本地 index.php(与远程相同):

require( dirname( __FILE__ ) . '/wpfolder/wp-blog-header.php' );

例如,目前不是我的链接将我带到 localhost/site_root/link 而是转到 localhost/link 和 404'ing。

由于我不完全理解,我无法让它工作:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^localhost/siteroot$
RewriteCond %{REQUEST_URI} !^/wpfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wpfolder/$1
RewriteCond %{HTTP_HOST} ^localhost/siteroot$
RewriteRule ^(/)?$ wpfolder/index.php [L] 
</IfModule>

但无论如何它不在原始站点的 htaccess 中(为什么我不明白)。我对 jeebus 的爱完全没有想法,谁能帮助上面的重写或建议我可能做错了什么?

如果我可以提供更多信息,请告诉我。

谢谢。

编辑:如果我只是复制原始站点,我无法理解为什么会出现问题! N一个原始链接或url都以根文件夹为前缀。

EDIT2:404 的一些示例 html。仅显示标题(由于require( dirname( __FILE__ ) . '/wpfolder/wp-blog-header.php' ))。

header.php

if (!is_404() && $ie7==false && !isset($_GET['preview'])) {
    echo '<script src="/tbtwp/wp-content/themes/tbt/_inc/js/functions.js"></script>';
}

菜单:

<div class="menu">
    <ul>
        <li class="nav-home <?php if(is_front_page()){ echo 'current_page_item' ; }?>"><a tabindex="1" href="/" title="home">Home</a></li>
        <li class="nav-about-us"><a tabindex="1" href="/about-us/" title="about-us">About Us</a></li>
        <li class="nav-the-store"><a tabindex="1" href="/the-store/" title="the-store">The Store</a></li>
        <li class="nav-catering"><a tabindex="1" href="/catering/" title="catering">Catering</a></li>
        <li class="nav-order-online <?php if(is_page('order-online/order-now')){ echo 'current_page_item' ; }?>"><a tabindex="1" href="/order-online/" title="order-online">Order Online</a></li>
        <li class="nav-our-stories"><a tabindex="1" href="/our-stories/" title="our-stories">Our Stories</a></li>
        <li class="nav-contact"><a tabindex="1" href="/contact/" title="contact">Contact</a></li>
    </ul>
</div>

【问题讨论】:

  • 是否有任何链接有效或所有链接都已损坏?我建议使用interconnect/it PHP database search and replace tool(无从属关系)在 url 分片上运行序列化搜索和替换
  • 所有链接都转到根 localhost/link 而不是 localhost/root/link。我现在看看你的链接。
  • 我认为这不是问题,因为 dbmigrate 在我导出数据库时会处理这个问题。当我的本地站点解析为 localhost/page.php (404) 而不是 localhost/sitefolder/page.php 时,它更多的问题是为什么远程站点会解析为 www.domain.com/page.php
  • 啊,@JPB 我一定看过你说的地方
    导出数据库时我设置的地址如下:
  • 好吧,如果它是一个自定义主题,并且开发人员正在使用类似 Roots Soil Root Relative URLs github.com/roots/soil(作为插件或直接在 functons.php 中),这肯定会影响您的网站。

标签: wordpress .htaccess


【解决方案1】:

对我有用的是遵循“重新定位”替代方案。

您在 wp-config 中定义 RELOCATE true。 然后在浏览器中输入本地 wp-login.php url 并登录。 检查浏览器中的 url 是本地的。 转到常规设置并查看站点 url 和 wp url。 站点 url 通常不会安装子文件夹 wehre wp。 wp url 会。 然后你保存你的设置。 如果您使用永久链接,请转到永久链接设置并保存它们。

最后一部分是将wordpress文件夹中的.htaccess和index.php复制到根文件夹,并编辑index.php: 上面写着require('./wp-blog-header.php'); 将其更改为require('./&lt;replace with wp subfolder name&gt;/wp-blog-header.php');

非常重要!: 最后删除define('RELOCATE',true);来自 wp 配置。 (不评论,删除)

参考资料: How to change URL using RELOCATE method

【讨论】:

  • 如果您指的是在您的页面“内容”中硬编码的链接,那是完全不同的事情。您必须运行 sql 命令来更新这些链接。
  • 我刚刚又看了你的帖子。在您提到“WP ADDRESS 远程:/home/siteuser/public_html,本地:/siteroot/wpfolder(我不明白为什么这不指向原始站点上的子目录?)”的地方,您输入的是 url 还是路径?它应该是一个 URL,包括安装 wp 的子文件夹。
  • 看这张照片。两者都是网址。 imh01-inmotionhosting1.netdna-ssl.com/support/images/stories/…(这是我从网上随便拍的,给大家看的例子)
  • 如果您在浏览器中定位您的网站 url,它会正确打开它还是失败并显示一些 404 或将您带到您的产品网站?
  • 关于.htaccess,您现在拥有的是以“RewriteBase /siteroot/”开头的那个或以“RewriteCond %{HTTP_HOST} ^localhost/siteroot$”开头的那个。它应该是您在重新定位和保存永久链接后从 wp 安装复制到 root 的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多