2017-02-19 78 views
0

我有一個接收一個參數,以打印頁面,這樣的PHP文件中只有最後一個部分:如何寫一個重寫規則傳遞路徑

build.php?parameter=print-this-article 

而且我要的是創造一個RewriteRule.htaccess,讓我非常最後一部分發送到PHP文件,無論級別,例如:

www.mysite.com/article/level-1/level-2/level-3 

因此,在這種情況下,build.php將接收參數level-3

但是,如果用戶鍵入以下URI:

www.mysite.com/article/level-1/level-2 

它的工作是這樣的:

build.php?parameter=level-2 

而且同樣具有level-1 ...

是否有一個解決方案?

+0

試圖更好地解釋這個問題 – Stratboy

回答

0

爲了獲得水平,你必須捕捉請求URI的一部分。爲確保它是最後一部分,它不得包含任何斜槓。這是由這個正則表達式

RewriteRule ([^/]+)$ build.php?parameter=$1 [L] 

最重要的部分是[^/],這是一個character class[...],包括任何not^斜線/認可。

0

我研究了更多並結束了混合PHP和RewriteRule

.htaccess我寫道:

# this sends the whole part of the URI that is after the 'article/' 
RewriteRule ^article/(.+)$ build.php?parameter=$1 [L] 

因此,如果URI是www.mysite.com/article/level-1/level-2 PHP文件build.php將收到此字符串level-1/level-2

而在build.php我添加了這個功能:

function get_last_parameter($link) 
    { 
     // to split the string right on the '/' 
     $parts = explode("/", $link); 
     // to remove empty elements, this helps in case a URI ended with '/' is received 
     $parts = array_diff($parts, array('')); 
     // take the final element of the array and remove any string that starts with '#', so it won't be confused with sections 
     $final_array = explode("#", end($parts)); 
     // the result is an array of two (or more elements) so send the first one (of this array) 
     $parameter = reset($final_array); 
     return $parameter; 
    } 
// ... and wrote the query to select from the database the article 

這種方法的好處是,我可以在同一時間使用URI的所有的「水平」,因爲我將擁有完整的陣列。