2012-09-01 72 views
5

我需要將3個變量與URL一起傳遞,但使用斜線。因此,例如,我會用這個網址:使用HTACCESS將斜線後的文本轉換爲變量

http://www.example.com/variable1/variable2/variable3

我在.htaccess中有這樣的允許後文要通過的第一變量,但我不能讓其他兩個才能通過,即使我想補充& $ 2

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /?([A-Za-z0-9_-]+)/?$ process.php?width=$1&height=$2 [QSA,L] 

任何鏈接或幫助將是巨大

回答

5

你只是上尉在你的重寫規則中使用一個變量。

你需要的東西,如:

RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$ process.php?width=$1&height=$2&third=$3 [QSA,L] 

,或者短一點:

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ process.php?width=$1&height=$2&third=$3 [QSA,L] 

(在\w單詞字符包括字母,數字和下劃線)

我只有做結束斜線可選,所以這個重寫規則只會在有3個變量的情況下才會執行。

+0

@Fraggy我通常使用多個重寫規則,所以先用3個瓦爾規則,然後用2的規則,那麼該規則只1.您還可以附上可選變量嵌套在非捕獲括號中。 – jeroen

6

您可能會發現更容易抓住的PHP文件中的參數,通過:

$pathinfo = isset($_SERVER['PATH_INFO']) 
    ? $_SERVER['PATH_INFO'] 
    : $_SERVER['REDIRECT_URL']; 

$params = preg_split('|/|', $pathinfo, -1, PREG_SPLIT_NO_EMPTY); 

echo "<pre>"; 
print_r($params); 

因此調用這個腳本:

http://www.example.com/variable1/variable2/variable3

將返回:

Array 
(
    [0] => variable1 
    [1] => variable2 
    [2] => variable3 
) 

這將適用於:

http://www.example.com/variable1/variable2/variable3http://www.example.com/process.php/variable1/variable2/variable3