2009-08-12 58 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方案开头)