2011-06-22 73 views
2

我在擺弄.htaccess和mod_rewrite。我有一個具有兩種類型的網址,我想重寫網站:htaccess有條件重寫

  • /index.php?nav=$2
  • /index.php?nav=41&intNewsId=$3 - 41是靜態的,新聞導航始終是41

我想重寫它們於:

  • /pagename/id
  • /news/pagename/id

我已經發了條說代碼工作,但如果我添加的最後一行的第二線停止工作,並我能想象那是因爲在第三塊中的條件也爲第二塊如此。但我不知道如何正確使用條件。 (兩個塊工作個人)

Options +FollowSymlinks 
RewriteEngine on 

# Reroute rules that end on/
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$ /$1/$2/ [R] 

# Make the system understand pagename/96 
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=$2 

# Make the system understand news/pagename/99 
RewriteRule ^(.*)\/(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=41&intNewsId=$3 

我什麼都試過了我能想到的,但我不是太熟悉,打字或htaccess的條件塊的這個表達式風格。

解決方案: 我修好了我自己的代碼,我只是剝離了第二$這樣的條件didnt與最後一個

Options +FollowSymlinks 
RewriteEngine on 

# Reroute rules that end on/
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$ /$1/$2/ [R] 

# Make the system understand pagename/96 
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/ /index.php?nav=$2 

# Make the system understand news/pagename/99 
RewriteRule ^(.*)\/(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=41&intNewsId=$3 

謝謝你的答案全部擾!

+0

爲什麼這個投票題外話? –

+0

另外,注意你可以通過使用'(\ d +)'來避免這些'[0-9]'結構的笨拙,它捕獲任何一個或多個數字的塊。 –

+0

噢,謝謝你的意見。注意我的([0-9] | [1-9] [0-9] | [1-9] [0-9] [0-9]),之前更糟:D –

回答

1

試試這個:

RewriteRule ^news/.+/([^/]*)$ /index.php?nav=41&intNewsId=$1 [L] 
RewriteRule ^.+/([^/]*)$ /index.php?nav=$1 [L] 
+0

謝謝你。使用這個我也得到了它的工作:D一天學習^^ –

+0

@漢斯Wassink:不客氣!如果我的答案解決了您的問題,請考慮通過點擊答案左側的投票計數下方的勾號來接受它。 – Shef

+0

滴答答答! –

0

試試這個:

# Make the system understand pagename/96 
RewriteCond %{REQUEST_URI} ^/pagename/([0-9]*) 
RewriteRule .* /index.php?nav=%1 

# Make the system understand news/pagename/99 
RewriteCond %{REQUEST_URI} ^/news/pagename/([0-9]*) 
RewriteRule .* /index.php?nav=41&intNewsId=%1 
+0

謝謝你,使用這個它工作(我改變頁面到一個multichar正則表達式檢查) 我修復了我自己的代碼工作太btw,我剛剛剝離第二個$,所以條件沒有干擾最後一個 –

+0

對於記錄,'RewriteCond'語句可以用適當的'RewriteRule's :) :) –

+0

@Hans Wassink很高興它的工作。按條件編寫規則總是好的,這使得它更有效率。 –

1

另一種方法,也許稍微更簡潔:

RewriteRule ^pagename/(\d+)$ index.php?nav=$1 
RewriteRule ^news/pagename/(\d+)$ index.php?nav=41&intNewsId=$1