2011-11-28 186 views
0

好吧,所以我重寫了一些自定義PHP購物車的頁面URL。重定向到一個重寫的URL

我有以下規則:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L] 
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L] 

這將允許我使用一個url結構像example.com/product/23/product-slug。

這部分工作正常。我想知道我對於另一個方向有什麼選擇;將舊網址的請求重定向到新網址。例如,當有人前往/product.php?id=2時,我想重定向到/ products/2/slug。

任何想法如何做到這一點?

我試過一個簡單的重定向,但不會工作:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug 
+0

僅供參考 - 'Redirect'是'mod_alias',不'mod_rewrite'的一部分。 – Kato

回答

0

我解決了這個問題:修改了store.php文件。

在Ping了正常URL和重寫URL之後,我查看了print_r($_SERVER)的輸出。我發現$_SERVER['SCRIPT_URL']包含「/store.php」,當正常的網址被擊中時,它包含我重寫的路徑,當重寫的URL被擊中。

這意味着我可以做一個簡單的測試,並適當地重定向:

if ($_SERVER['SCRIPT_URL'] == "/store.php") { 
    // run some code that will generate the url 
    $rewrittenURL = generateURL(); 
    // then add: 
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent 
    header("Location: $rewrittenURL"); 
} 
0

重定向只需要一個網址的前綴,而不是一個正則表達式(如/store.php或/店)

你需要嘗試RedirectMatch:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug 

此外,它應該以一個/?開頭,我不確定(例如,上面的RewriteRule條目以無斜線開頭)

+0

RedirectMatch 301 ^/store \ .php \?cat = 16 $ http://www.exmaple.com/category/16/cat-slug無法正常工作。 – Jazzerus