2015-11-30 39 views
0

我正在一個WordPress網站上工作,並且由於一些頑固的插件,我需要重寫URL以使結構整潔。但是,我遇到了一個奇怪的問題,我無法自己想出來。htaccess不能用WordPress重定向

我想要做的事: 重寫所有的網址,如: domain.com/location/corporate-housing-SOMETHING/

到: domain.com/corporate-housing/SOMETHING/

如果我包含完整的域路徑,它將成功重定向。當我拿走域名而沒有別的,它給了我一個404。我在多個瀏覽器上測試過,以確保我沒有緩存任何東西。我的.htaccess文件低於:

#DirectoryIndex maintenance.html index.php index.html 
# BEGIN WordPress 
<IfModule mod_rewrite.c> 
Redirect 301 /location/central-west-end /location/corporate-housing-central-west-end/ 
Redirect 301 /location/claytonbrentwood /location/corporate-housing-claytonbrentwood/ 
Redirect 301 /location/downtown /location/corporate-housing-downtown/ 
Redirect 301 /location/west-county /location/corporate-housing-west-county/ 
Redirect 301 /location/central /location/corporate-housing-central/ 
Redirect 301 /location/st-charlesofallon /location/corporate-housing-st-charlesofallon/ 
Redirect 301 /location/south-county /location/corporate-housing-couth-county/ 
Redirect 301 /location/metro-east-illinois /location/corporate-housing-metro-east-illinois/ 
RewriteEngine On 
RewriteBase/
RewriteRule ^corporate-housing/([a-zA-Z0-9-]+)/?$ /location/corporate-housing-$1/ [NC,L] 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

更改爲此建議上,仍無法正常工作:

#DirectoryIndex maintenance.html index.php index.html 
# BEGIN WordPress 
<IfModule mod_rewrite.c> 
Redirect 301 /location/central-west-end /location/corporate-housing-central-west-end/ 
Redirect 301 /location/claytonbrentwood /location/corporate-housing-claytonbrentwood/ 
Redirect 301 /location/downtown /location/corporate-housing-downtown/ 
Redirect 301 /location/west-county /location/corporate-housing-west-county/ 
Redirect 301 /location/central /location/corporate-housing-central/ 
Redirect 301 /location/st-charlesofallon /location/corporate-housing-st-charlesofallon/ 
Redirect 301 /location/south-county /location/corporate-housing-couth-county/ 
Redirect 301 /location/metro-east-illinois /location/corporate-housing-metro-east-illinois/ 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^corporate-housing/([^/]+)/?$ /location/corporate-housing-$1/ [NC,L] 

RewriteRule ^index\.php$ - [L] 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

找到了解決這個。我增加了以下內容的functions.php:

add_action('init', 'add_rewrite_rules'); 
function add_rewrite_rules() { 
    add_rewrite_rule('corporate-housing/([0-9a-zA-Z-]+)/?', 'index.php?location-categories=corporate-housing-$matches[1]', 'top'); 
    add_rewrite_rule('furnished-apartments/([0-9a-zA-Z-]+)/?', 'index.php?location-categories=furnished-apartments-$matches[1]', 'top'); 
    flush_rewrite_rules(); 
} 

然後註釋掉刷新重寫一次,它已生效。

+0

這些重定向如何適合您的重寫?因爲看起來你仍然在301重定向中包含「位置」。看起來不正確。 –

+0

我不得不添加另一個類別(佈置公寓),永久重定向是爲了解決這些問題。這些與重寫有衝突嗎? – DavyH

回答

0

根據您的規則不正確的問題。該規則應該是RewriteRule {rewrite_pattern} {rewrite_target} [{flags}]

RewriteRule ^/location/corporate-housing-([a-zA-Z0-9-]+)/$ corporate-housing/$1/ [NC,L] 
+0

究竟爲什麼當他不處理任何查詢字符串時他需要'QSA'標誌? –

+0

不起作用。當我嘗試訪問domain.com/corporate-housing/central時,它仍然給我一個404。 – DavyH

+0

@DavyH我懷疑你實際上是想以另一種方式,即使你的問題表明,應該從'域'引導。 com/location/corporate-housing-SOMETHING /'到'domain.com/corporate-housing/SOMETHING /'。請澄清 – GeorgeQ

0

你需要改變你的代碼看起來像這樣。檢查真實文件或文件夾如果不存在,則轉到下一個規則。

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^location/corporate-housing-(.+)/?$ http://www.example.com/corporate-housing/$1 [R=301,NC,L] 

RewriteRule ^index\.php$ - [L] 
RewriteRule . /index.php [L] 

讓我知道這是如何適用於你。

+0

它不起作用。我會更新OP來顯示我改變了它。 – DavyH

+0

你在瀏覽器中輸入什麼格式的URL? –

+0

重寫進入真實目錄嗎? '/ location/corporate-housing-downtown /'是一個真實的目錄嗎? –