在Wordpress网站中将登台迁移到开发后,相对链接中断了

时间:2017-09-02 20:52:05

标签: wordpress apache .htaccess

尝试将托管在某些托管服务提供商上的Wordpress 暂存网站迁移到本地计算机,并遇到相关网址问题。

迁移步骤

1)克隆的站点代码库 2)导入mysql转储 3)使用wp-cli来搜索和替换登台站点URL 本地主机/位点

除了一些相对的网址,一切似乎都很好。

问题示例

正确链接

子菜单旅行链接到旅行(其子弹旅行),因此点击它会重定向到正确的路径 siteurl /旅行。 其中siteurl是 / var / www / html / site 中托管的 localhost / site

链接不正确

小部件区域图像链接 / travel 以某种方式链接到错误的路径 localhost / travel 。 其设置 - >一般 - > WordPress地址(网址)和网站地址(网址)为: localhost / site

我认为它与 .htaccess 文件或apache服务器配置有某种关系。

Localhost站点 .htaccess 文件内容为:

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

一般来说,我的问题是,需要什么样的apache服务器配置来复制托管上相对链接的行为?因此,网站上的相对链接(如 / link )将与wordpress网站网址( localhost / site / link )相关,而不是相对于主机 - localhost /链路

2 个答案:

答案 0 :(得分:1)

  

因此,localhost/site/link等网站上的相对链接与wordpress网站网址(localhost/link)相关,而不是相对于主机 - /link

URL http://localhost/link(带有斜杠前缀)是root-relative,而不仅仅是#34; relative&#34;。这将是相对于文档根,即。您的示例中为link。但是,http://localhost/site/file形式的URL(无斜杠前缀) relative - 相对于当前URL路径(在浏览器中)。因此,根据网址linkhttp://localhost/site/link形式的相对网址自然会(通过浏览器)解析为http://localhost/site/path/to/file - 这在您的示例中似乎是正确的。但是,根据网址http://localhost/site/path/to/link,相同的相对网址将解析为/site - 这可能不合适,因此相对链接并不是真正的答案(最好在网址重写时避免) 。所以,这最终是一个客户端问题 - 它是解析相对URL路径的浏览器 - 而不是服务器。

要解决此问题,您需要更改所有网址,以便他们正确解析(例如,在您的情况下将它们设为 relative - 尽管这通常会导致WordPress出现问题站点 - 如果您更改了永久链接结构,那么所有链接都会中断),如果您最终将站点移动到另一台服务器,则可能无法正常工作。或者更改站点的文档根目录并删除.htaccess子目录。如果您没有托管来自不同子目录的多个网站,则可以通过http://localhost/中的重写来解决此问题。但是,在您的情况下,这会破坏在其自己的子目录中运行的所有其他站点。

您确实需要在本地开发计算机上将单独的站点设置为单独的站点,而不是基本上只是单个站点(即<VirtualHost>)的子目录。这涉及在服务器配置中创建单独的DocumentRoot容器,为每个站点定义单独的http://local.example.com/。您还需要使用本地HOSTS文件(或DNS)将域指向本地开发服务器。

因此,WordPress中的网站网址将变为类似/var/www/example.com/public_html的内容,它将从您的开发计算机上的某个位置托管,如{{1}}。

答案 1 :(得分:0)

正如 MrWhite 建议以下步骤解决了这些问题:

1)将<{3}}块添加到 Apache apache2.conf 配置文件中。

NameVirtualHost 192.168.1.10:80
<VirtualHost 192.168.1.10:80>
   ServerName local.site.com
   DocumentRoot "/var/www/html/local.site"
</VirtualHost>
  • /var/www/html/local.site 是本地计算机上所有网站文件所在的文件夹。
  • local.site.com 是本地网站的域名
  • VirtualHost 指令通过在命令行中运行 ip addr show 以在一个IP地址上支持多个基于名称的虚拟主机,具有可发现的显式IP地址

2)将以下条目添加到 / etc / hosts

  

192.168.1.10 local.site.com

符合记事vhost

  

在Apache服务器上创建虚拟主机配置不会   神奇地导致为这些主机名创建DNS条目。您   必须在DNS中具有名称,解析为您的IP地址,或者没有人   否则将能够看到您的网站。你可以把条目放在你的   托管文件进行本地测试,但这只能从机器上运行   与那些主机条目。

3)使用与登台网站相同的.htaccess

它基本上包含以下内容:

# 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>

可能有更多来自安全wordpress插件的指令。如果他们使用暂存网站网址,如:

#AIOWPS_PREVENT_IMAGE_HOTLINKS_START
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://site.com [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]
</IfModule>

RewriteCond %{HTTP_REFERER} !^http(s)?://site.com [NC]应替换为RewriteCond %{HTTP_REFERER} !^http(s)?://local.site.com [NC]

所有步骤均在:

之后执行
  1. 将站点代码存储库克隆到本地开发环境

  2. 将mysql转储导入本地mysql db

  3. 使用here 使用 local.site.com
  4. 搜索和替换登台网站网址