2010-05-17 38 views
0

如何編輯此url重寫以包含進一步的get變量被附加到URL?我嘗試了一些嘗試,但我總是得到500內部服務器錯誤!Mod重寫:處理兩個獲取變量

我已添加評論以顯示我正在努力實現的目標。

# /view.php?user=h5k6&page=1 externally to /h5k6/1 
# Some times the page get variable will not exist so it should just show /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*user=([^&]+)&?.*$ 
RewriteRule ^view\.php$ /%2? [L,R=301] 

# /h5k6/1 internally to /view.php?t=h5k6&page=1 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

感謝所有幫助

+0

錯誤日誌說什麼? – Gumbo 2010-05-17 22:37:05

+0

@Gumbo - 上面沒有錯誤,但是當我編輯htaccess文件以包含另一個獲取變量時,出現錯誤(500內部服務器錯誤) - 我希望找出如何編輯上述* *正確地**包含兩個GET變量,並在我的註釋中重寫URL,'/ h5k66/1'。第一部分是用戶GET變量,第二部分是頁面GET變量。 – Abs 2010-05-17 22:42:01

+0

@Abs:那麼你如何嘗試包含另一個GET參數? – Gumbo 2010-05-17 22:49:38

回答

1

與URI查詢參數的問題都在於,它們可能出現在任何順序。有兩個參數,你只有兩個排列組合(A之前BB之前A)。但是你想要提取更多的參數(n!)。

這意味着你應該把論點正確的順序,以便您可以將它們在同一時間:

RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)(page=[^&]+)&?([^&].*)?$ 
RewriteCond %3&%1%4 ^(([^&]*&)*)(user=[^&]+)&?([^&].*)?$ 
RewriteCond %3&%1%4 ^user=([^&]+)&page=([^&]+)&?([^&].*)?$ 
RewriteRule ^view\.php$ /%1/%2?%3 [L,R=301] 

第一個條件檢查請求行就像在你的規則。第二個條件選取參數並將其放在查詢字符串的開頭。第三個條件與用戶參數相同,因此該訂單始終爲:第一個用戶,第二個。然後我們使用第四個條件一次取兩個參數值,以便在RewriteRule替換中使用它們。查詢的其餘部分附加到替換URI(請參閱%3),但如果需要,可以將其關閉。

正如你所看到的,你想要提取的參數越多,它就越複雜。用比PHP這樣的mod_rewrite更強大的語言來做到這一點更容易。

+0

你說得對,這會變得複雜。我已經開始使用codeigniter重寫我的項目,我想我可以利用路由。 – Abs 2010-05-27 11:06:03