2014-02-12 61 views
2

我想知道是否有可能實現這一波紋管:阿帕奇modrewrite的.htaccess - 類似鏈接

有時第二個屬性將子

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

有時會位置

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

但通常情況下,這種方式不起作用。有沒有什麼可能的方法來實現這一目標?

編輯: 當前完全重寫規則:

RewriteEngine on 
ErrorDocument 404 /error 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 


RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 
+0

您應該發佈完整的重寫規則列表。例如有一個RewriteBase指令可以改變整體行爲。 – freedev

+0

當然,它不會這樣工作。您需要在'news'鏈接前綴爲:'/ main/n-top' =>'/index.php?menu = main&news = top' – anubhava

+0

您能更準確嗎? – Clem

回答

2

要闡述我的意見進一步,你可以有這樣的規則:

ErrorDocument 404 /error 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^([\w-]+)/n-([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 

現在您的新聞鏈接應該是這樣的:http://domain.com/main-menu/n-sports

+0

這似乎現在工作。謝謝。 雖然我完全不理解這個,但是這個「n-」是幹什麼的:) – Clem

+1

不客氣。在你的新聞鏈接中有'n-'作爲前綴,這樣你就不會有完全相同的匹配模式。 – anubhava

1

考慮你的正則表達式匹配\w,代表「單詞字符」,通常爲[A-Za-z0-9_]。注意包含下劃線和數字。這也意味着這與例如重音字符不匹配。當然,這不符合在URL中開始每個路徑的前導斜槓。

你應該改變你的重寫添加斜線:

RewriteRule ^/([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

# RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 

我也評論了第三個規則,因爲正則表達式是相同的第二位。您的方法也有一個合理的問題,因爲這些行之間沒有區別,所以無法撥打index.php?menu=$1&submenu=$2