2017-01-10 89 views
1

我最近搬走了託管服務器,但是我在目錄中做了一些小改動。我將文件夾從「列表」更名爲「供應商」。我使用下面的代碼來防止404錯誤。無法用.htaccess重寫文件夾

RewriteEngine On 
RewriteRule ^listing/(.*) vendors/$1 

這並沒有爲我工作。我能做些什麼來解決這個問題?

舊網址:

http://www.oldsite.com/curacao/listing/chinese-culture-club/ 

新網址:

http://www.newsite.com/curacao/vendors/chinese-culture-club/ 

這是一個完整的.htaccess

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule ^index\.php$ - [L] 

# add a trailing slash to /wp-admin 
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule^- [L] 
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] 
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] 
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ 
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ 
RewriteRule . index.php [L] 

RewriteRule ^listing/(.*) vendors/$1 

# BEGIN WPSuperCache 
# END WPSuperCache 
# BEGIN WordPress 

# END WordPress 
+0

在哪個目錄下是.htaccess? – arco444

+0

最有可能的解釋'.htaccess'尚未啓用。 – arkascha

+0

@ arco444在根 –

回答

0
RewriteRule ^listing/(.*) vendors/$1 

這似乎有更多的錯誤,比評論中所涵蓋的。首先,您的示例URL具有主機/域的更改,但這不反映在此指令中。或者是否oldsite.comnewsite.com託管在相同的地方(我假設他們是)。此外,您發佈的內容是內部重寫,但您可能需要外部重定向才能正確解析404(否則您最終會得到本質上重複內容)。

請在您的現有內部重寫之前,在.htaccess文件的頂部嘗試以下操作。作爲一般規則,外部重定向應該比以前內部重寫

RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com [NC] 
RewriteRule ^(curacao)/listing/(.*) http://www.newsite.com/$1/vendors/$2 [R=302,L] 

你只需要一個RewriteEngine指令,最好在你的文件的頂部。 (它可以是任何地方,但它在頂部的多個邏輯。)

$1是反向引用在RewriteRule圖案,這僅僅是「庫拉索」在這種情況下第一捕獲基團,但它避免重複。而2美元是對第二個捕獲組的反向引用,就像你以前一樣。

R標誌指示一個外部重定向(絕對在取代 URL也很可能無論如何觸發外部重定向,而是將默認爲一個302)。 Llast)確保在此過程中不會再處理mod_rewrite指令。

如果這應該是永久重定向,那麼請將302(臨時)更改爲301(永久)。 301s被瀏覽器緩存,因此可能導致測試出現問題。