2017-09-02 68 views
1

試圖遷移Wordpress 登臺某些託管提供商託管到本地計算機的網站,並且存在相關URL的問題。在Wordpress網站中遷移到開發階段後,相關鏈接中斷

遷移步驟

1)克隆的網站代碼中使用wp-cli本地主機/網站的搜索和替換臨時站點URL庫 2)進口的MySQL轉儲 3)

一切似乎很好,除了一些相對的網址。問題

例子:

正確連接

子菜單旅遊鏈接頁遊(其蛞蝓是旅遊),所以點擊它重定向到正確的路徑siteurl/travel。 其中siteurl是localhost/site託管在/var/www/html/site

不正確的連接

按鈕區圖像鏈接/旅遊莫名其妙地鏈接到錯誤的路徑本地主機/旅遊。 其設置>通用>的WordPress地址(URL)及網站地址(URL)是:本地主機/網站

我認爲這是某種聯繫的.htaccess文件或Apache服務器的配置。

本地主機的網站的.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服務器的配置複製主機上的相關鏈接的行爲?因此,像/鏈接這樣的網站上的相對鏈接將相對於WordPress的網站地址(本地主機/網站/鏈接),而不是相對於主機 - 本地主機/鏈接

+0

你有託管在'localhost'其他網站更換升級網站的網址? – MrWhite

+0

是的,有_localhost_上的網站 – user1264304

回答

1

所以在網站上相對鏈接像/link將相對於WordPress網站網址(localhost/site/link),而不是相對於主機 - localhost/link

URL /link(帶有斜槓前綴)是根相對的,而不是簡單的「相對」。這將相對於文檔根即ie。在你的例子中爲http://localhost/link。但是,形式爲link(無斜槓前綴)的網址爲,相對於--即相對於當前URL路徑(在瀏覽器中)。因此,考慮到URL http://localhost/site/filelink形式的相對URL自然會(通過瀏覽器)解析爲http://localhost/site/link - 在您的示例中這似乎是正確的。但是,如果URL爲http://localhost/site/path/to/file,則相同的相對URL將會解析爲http://localhost/site/path/to/link - 這可能不合意,所以相對鏈接並不是真正的答案(在URL重寫時最好避免)。所以,這最終是一個客戶端問題 - 它是解析相對URL路徑的瀏覽器 - 而不是服務器。 。

要解決這個問題,您需要更改所有的URL,使他們正確地解析(即讓他們在你的情況相對似乎 - 雖然這通常是一個WordPress站點問題的原因 - 如果你改變你的永久鏈接結構,然後你所有的鏈接中斷),如果你最終將網站移動到另一臺服務器,這可能無法很好地工作。或者更改站點的文檔根目錄並刪除/site子目錄。如果您沒有託管來自不同子目錄的多個站點,您可以通過重寫.htaccess來解決此問題。但是,就你的情況而言,這將破壞所有在其自己的子目錄外運行的其他站點。

你真的需要設置你的本地開發機器上的單獨的網站爲單獨的網站,不作爲子目錄過什麼本質上只是一個單一的網站(即http://localhost/)。這涉及在服務器配置內創建單獨的<VirtualHost>容器,爲每個站點定義單獨的DocumentRoot。您還需要使用本地HOSTS文件(或DNS)將域指向本地開發服務器。

所以,你網站網址在WordPress會成爲像http://local.example.com/這會從什麼地方像/var/www/example.com/public_html開發機器上託管。

0

作爲MrWhite建議下列步驟來解決的問題:

1)添加vhost塊的阿帕奇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是本地網站
  • 虛擬主機指令有一個明確的IP地址,通過在命令行中運行IP地址顯示發現,支持多種基於域名的虛擬主機的域名上的一個IP地址

2)添加以下條目/etc/hosts中

192.168.1.10 local.site。COM

爲了符合注意到here

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插件更多的指令。如果他們使用分段網站的url像:

#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 dump導入本地mysql db

  3. 使用wp-cli到 搜索與local.site.com