2009-08-12 57 views
0

我想了解.htaccess重定向如何工作。.htaccess重定向如何工作?

例如說,我的用戶導航到:

www.website.com/users/bob

我如何可以重定向用戶:

WWW。 website.com/users.php?user=bob

+0

在這裏和在serverfault.com上有這樣的問題無窮無盡的流。這個怎麼樣,例如:http://stackoverflow.com/questions/1249368/mod-rewrite-beginner-questions – innaM 2009-08-12 09:09:31

回答

3

您的.htaccess將lo好吧,像這樣:

# turn on the engine 
RewriteEngine On 

RewriteRule ^users/(.*)$ /users.php?user=$1 

# Pattern: 
#^ = start of URL (.htaccess doesn't get the leading "/") 
# users/ = your path 
# (.*) = capture any character, any number of times 
# $  = end of string 

# Result: 
# /users.php?user= = your path 
# $1    = the first group captured in the pattern 
+0

你應該也可以提到上面的RewriteBase。 – 2009-08-12 08:32:33

+0

現在$ 1 ...如果我想在這裏添加第二條規則,而不是website.com/users/bob,它將是website.com/show/whatever,並將其重定向到website.com/show.php。 ?ID =什麼的。我是否會簡單地複製該行,更改具體內容,並在最後放置2美元? – mrpatg 2009-08-12 08:33:22

+0

不,您仍然使用$ 1 - 這是相關規則中的組。例如你可以有/ users/bob/bobbinson,匹配/users/([^/]*)/(.*)$然後$ 1是bob,$ 2是bobbinson – Greg 2009-08-12 08:43:12

0

我建議您閱讀technical details of mod_rewrite。你可以很好地瞭解內部處理。

爲了您的具體的例子,一個合適的規則可能是這樣的:

RewriteRule ^users/([a-z]+)$ users.php?user=$1 

現在,當被請求/users/bob,mod_rewrite的將:

  1. 條上下文每目錄前綴(/如果.htaccess文件位於文檔根目錄中)
  2. 根據模式測試其餘(users/bob),直到匹配
    • ,如果有任何相應RewriteCond指示他們,將被測試過
  3. 替換爲新一個當前的URL(而與相應的匹配替換$n%n) ,如果模式匹配且條件評估爲真
  4. 如果替換的URL不是絕對URL路徑,則返回上下文目錄前綴前綴(begin與/)或絕對URL(以URL方案開頭)