尝试将托管在某些托管服务提供商上的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 /链路。
答案 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路径(在浏览器中)。因此,根据网址link
,http://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>
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]
所有步骤均在:
之后执行将站点代码存储库克隆到本地开发环境
将mysql转储导入本地mysql db