2011-08-04 68 views
1

我認爲這很簡單,但是我遇到問題會將舊模板組永久重定向到新模板組。表達式引擎2 301將舊模板組重定向到新模板

我有www.domain.co.uk/weddings需要指向www.domain.co.uk/more-weddings

這兩個模板組都存在,不確定是否需要刪除舊模板組?或模板首選項中的其他設置?

這是我一直在嘗試使用:

RedirectMatch 301 ^/weddings\$ http://www.domain.co.uk/more-weddings 

我有一個正在過負載更多重定向,這個新的一個需要放在上面呢?

+1

爲什麼你有美元特殊符號逃脫'\ $'?這告訴Apache尋找這個URL'/ weddings $'。在'$'之前沒有反斜槓Apache將精確地查找'/ weddings'。 – LazyOne

回答

3

你可以在較舊的模板(婚禮/指數)啓用PHP,並將這個在它:

<?php 
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: http://www.domain.co.uk/more-weddings'); 
    exit(); 
?> 
+0

完美的答案 - 對我來說就像一個魅力 – Trent

0

當寫mod_rewrite規則,這些規則得到的順序應用它們出現。

在你的情況,你會希望你的RedirectMatch之前的任何其他重寫規則 —如果你removing index.php from your ExpressionEngine URLs尤其如此出現。

在您的例子,如果你只是想重定向某個目錄(即ExpressionEngine模板組),下面的規則將這樣做,同時允許網站的其餘部分正常工作:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Only Matching Directories 
    RewriteCond %{REQUEST_URI} ^/(weddings|weddings/.*)$ 
    RewriteRule ^(.*)$ http://www.domain.co.uk/more-weddings/$1 [R=301,L] 
</IfModule> 

確保該規則出現之前的index.php(下面的例子)的去除:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect Only Matching Directories 
    RewriteCond %{REQUEST_URI} ^/(weddings|weddings/.*)$ 
    RewriteRule ^(.*)$ http://www.domain.co.uk/more-weddings/$1 [R=301,L] 

    # Removes ExpressionEngine index.php from URLs 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

如果您希望Google和其他抓取工具將您的內容視爲暫時移動(響應代碼302,默認值)或永久移動(301),請務必正確配置RewriteRule Flags

Apache mod_rewrite Cheat Sheet