2016-10-29 15 views
0

我已經在這裏找到了我的問題的答案,但總是提供解決方案,但沒有解釋如何去做,這就是我無法正確執行的原因。用.htaccess製作可選參數

我有這樣的代碼:

RewriteRule ^dex/([^_]*)/([^_]*)/([^_]*)/([^_]*)/([^_]*)$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L] 

這htaccess的,因爲它是使得強制性的,所有的參數都給出。該URL的工作原理:

http://example.com/dex/one/two/three/four/five

我也想讓它這樣工作:

http://example.com/dex/one/two/three/four

製作的最後一個(或一些)參數可選。我在這裏讀了一些關於QSA | qsappend的文章:http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_qsa,但我完全無法理解它。

任何幫助?謝謝

+0

如果您收到4個值,您將如何知道缺少哪一個? –

回答

0

重寫規則使用正則表達式。這些正則表達式總是令人厭煩且難以維護。以下,例如,是一個答案關於HTML解析器正則表達式質疑和困難,你可以跟他們發現:

RegEx match open tags except XHTML self-contained tags

你的htaccess文件是Apache的配置文件。它應該用於簡單配置,而不是用於編程。讓它指向代碼,然後讓代碼完成剩下的工作。例如,您的.htaccess文件:

RewriteRule ^(.*)$ index.php [QSA,NC,L] 

而且,如果你使用的是與PHP的index.php ...

$objects = explode('/', ltrim($_SERVER[REDIRECT_URL], '/')); 

print_r($objects); // list of items from URL 

你可能最終想要抓住不同的服務器參數,但你會想在代碼中保留這些複雜的東西,而不是在配置文件中。

0

具有相同問題的人,這是用來固定它的代碼:

RewriteRule ^dex/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?([^/]*)?$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L] 

改變([^_]*)([^/]*)後我想讓可選的添加?

在這種情況下:/?正在使可選的結束斜槓,([^/]*)?使最後一個參數可選。所以它的作品時,URL是這樣的:

http://example.com/dex/one/two/three/four/ 

http://example.com/dex/one/two/three/four 

http://example.com/dex/one/two/three/four/five 

http://example.com/dex/one/two/three/four/five/ 

希望這可以幫助別人。