.htaccess重定向如何工作?

.htaccess重定向如何工作?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我试图了解.htaccess重定向是如何工作的 例如,我的用户导航到: www.website.com/users/bob 如何将该用户重定向到: www.website.com/users.php?user=bob 您的.htaccess将如下所示: # turn on the engine RewriteEngine On RewriteRule ^users/(.*)$ /users.php?user=$1 # Pattern: # ^ = start of URL (.ht

我试图了解.htaccess重定向是如何工作的

例如,我的用户导航到:

www.website.com/users/bob

如何将该用户重定向到:

www.website.com/users.php?user=bob


您的.htaccess将如下所示:

# 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
RewriteRule ^users/([a-z]+)$ users.php?user=$1

您的.htaccess将如下所示:

# 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
RewriteRule ^users/([a-z]+)$ users.php?user=$1

我建议你读一下这本书。在这里,您可以很好地了解内部处理

对于您的特定示例,合适的规则可能如下所示:

# 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
RewriteRule ^users/([a-z]+)$ users.php?user=$1
现在,当请求
/users/bob
时,mod_rewrite将:

  • 从请求的路径中删除每个目录的上下文前缀(
    /
    ,如果.htaccess文件位于文档根目录中)
  • 根据模式测试其余(
    users/bob
    )直到其中一个匹配
    • 如果有任何相应的
      RewriteCond
      指令,也会对它们进行测试
  • 如果模式匹配且条件评估为true,则将当前URL替换为新URL(同时将
    $
    n
    %
    n
    替换为相应的匹配项)
  • 如果替换的URL不是绝对URL路径(以
    /
    开头)或绝对URL(以URL方案开头),请重新添加每个目录的上下文前缀

  • 我建议你读一下这本书。在这里,您可以很好地了解内部处理

    对于您的特定示例,合适的规则可能如下所示:

    # 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
    
    RewriteRule ^users/([a-z]+)$ users.php?user=$1
    
    现在,当请求
    /users/bob
    时,mod_rewrite将:

  • 从请求的路径中删除每个目录的上下文前缀(
    /
    ,如果.htaccess文件位于文档根目录中)
  • 根据模式测试其余(
    users/bob
    )直到其中一个匹配
    • 如果有任何相应的
      RewriteCond
      指令,也会对它们进行测试
  • 如果模式匹配且条件评估为true,则将当前URL替换为新URL(同时将
    $
    n
    %
    n
    替换为相应的匹配项)
  • 如果替换的URL不是绝对URL路径(以
    /
    开头)或绝对URL(以URL方案开头),请重新添加每个目录的上下文前缀

  • 您可能还应该提到上面的RewriteBase。现在是$1…如果我想在这里添加第二条规则,但不是website.com/users/bob,而是website.com/show/where,并将其重定向到website.com/show.php?id=where。我会简单地复制那一行,改变细节,然后在末尾放一个$2吗?不,你仍然会使用$1-它是关联规则中的组。例如,你可以有/users/bob/bobbinson,match/users/([^/]*)/(.*),然后$1是bob,$2是bobbinson,你可能还应该提到上面的RewriteBase。现在$1…如果我想在这里添加第二条规则,但不是website.com/users/bob,它应该是website.com/show/where,并将其重定向到website.com/show.php?id=where。我会简单地复制那一行,改变细节,然后在末尾放一个$2吗?不,你仍然会使用$1-它是关联规则中的组。例如,你可以有/users/bob/bobbinson,match/users/([^/]*)/(.*),然后$1是bob,$2是bobbinson。像这样的问题在这里和serverfault.com上层出不穷。例如:像这样的问题在这里和serverfault.com上层出不穷。这个怎么样,例如: