2011-07-24 65 views
0

我有一幫有被重定向鏈接...但只有兩種這些鏈接:更多的.htaccess重定向需要幫助

  1. 網址像http://mydomain.com/category/new%20york應該被重定向到http://mydomain.com/category/New-York,所以,每個空格(或%20)應該是「減號」,第一個字母應該是大寫(在類別名稱中)。

  2. http://mydomain.com/category/california應該是http://mydomain.com/category/California,所以第一個字母必須是大寫。

  3. 當然,如果是http://mydomain.com/category/New%20York,應該是http://mydomain.com/category/New-York

你能幫助我嗎?

回答

1

我不太確定mod_rewrite本身可以將單詞轉換爲大寫版本,也不會將%20轉換爲---然而,您可以重定向到頁面的小寫版本,並讓PHP直接設置記錄。

據我所知,RewriteMap只能將整個網址轉換爲大寫或小寫......因此,您可能需要按照上面的建議進行操作。

該代碼將是如下:

^category/([a-z\-\ ]+)(/)?$ index.php?category=$1 [NC,L] 

...在PHP中,你會想做到以下幾點:

<?php 
    //Get the category 
    $cat = (isset($_GET['category']))? $_GET['category'] : ''; 

    //Check if we need to convert the url 
    if(($cat != '') && (strpos($cat, ' ') !== false) || !ctype_upper($cat[0])) { 

     //$new_category = Word-Number-One 
     $new_category = str_replace(' ', '-', ucwords($cat)); 

     //Redirect to the new URL 
     header('Location: http://' . $_SERVER['SERVER_NAME'] . '/category/' . $new_category); 

    }   
?> 

我已經嘗試過了我自己的服務器,它工作得很好,所以希望我沒有設法在將代碼複製到textarea時癱瘓代碼。

+0

mod_rewrite可以在RewriteMap的幫助下將所有字符轉換爲大寫或小寫(好吧,所有這些都可以通過使用** prg:**類型來實現,這將使用一些外部腳本來重寫)。但是對於這樣複雜的需求,通過自定義PHP腳本(或者首先生成正確的URL)更容易做到這一點,因爲RewriteMaps通常在共享主機上不可用(因爲'RewriteMap'指令不能在htaccess上下文中聲明,只有服務器配置或虛擬主機)。 – LazyOne