2012-01-24 31 views
1

我很抱歉如果標題不是很清楚,因爲我是mod_rewrite的新手,我不確定如何正確地描述問題。mod_rewrite在url中使用變量的數字位置

我想一個奇特的URL重寫如http://www.url.com/module/subdirectory/another_subdirectory/pagehttp://www.url.com/d_1=module & D_2 =子目錄& d_3 = another_subdirectory & page = page。子目錄的數量會有所不同,因此參數d_ *可以是動態的(儘管將其保留在d_1和d_9之間)。花哨的url也可以有它自己的查詢字符串,並且它需要被重寫爲在頁面參數之後發生。

我讀了Apache的mod_rewrite和regex文檔,花了一些時間在Google和Stackoverflow上尋找答案,但找不到這個特定問題的任何內容。任何有關這個問題的更多知識的幫助將不勝感激。

+0

它更容易在應用程序中執行此邏輯,例如, PHP。我假設你有一個很好的理由在Apache –

+0

中做這個嘗試,我正在使用自定義PHP CMS中的命名空間。每個頁面都是自己文件中的一個類。 url **?d_1 = module&d_2 =子目錄&d_3 = another_subdirectory&page = page **告訴CMS實例化\ Module \ Subdirectory \ AnotherSubdirectory \ Page類。我想讓那些花哨的網站掩蓋醜陋的情況。有沒有另一種方法來解決這個問題,我沒有看到? – user1166443

回答

0

你可以嘗試像下面在根目錄下的.htacess,雖然你需要完成的情況下,至多9

我也假設你的CMS應用程序的index.php。如果沒有使用正確的PHP文件替換

RewriteEngine on 
RewriteBase/

#one subdir 
RewriteRule ^module/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&page=$2 [QSA,L,NC] 
#two subdir 
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&page=$3 [QSA,L,NC] 
#three subdir 
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&d_4=$3&page=$4 [QSA,L,NC] 
0

改造的烏爾裏希的代碼並不需要儘可能多的重複,通過使子目錄零部件選購。最後一部分始終映射到page

RewriteRule ^(module)/(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)$ index.php?d_1=$1&d_2=$2&d_3=$3&d_4=$4&d_5=$5&d_6=$6&d_7=$7&d_8=$8&page=$9 [QSA,L,NC] 

雖然我更願意用一些PHP代碼這一點。

$dirs = expode('/', $_SERVER['REQUEST_URI']); 
array_shift($dirs);//remove first empty string. 
$page = array_pop($dirs);//get last part of the url.