.htaccess 重写给我正则表达式问题的规则

.htaccess 重写给我正则表达式问题的规则,.htaccess,redirect,url-redirection,.htaccess,Redirect,Url Redirection,我正在尝试做一个简单的重定向,在那里转到像www.example.com/foo这样的url将带我到www.example.com/quokka/inquiry/ask.php?user=foo 出于测试目的,我从以下内容开始: RewriteRule^(m.*)$/quokka/inquiry/ask.php?user=$1 这对于foo以字母m开头的用例非常有用,但我希望它是超级可定制的。因此,我将此重定向(注意删除字母m): RewriteRule^(.*)$/quokka/inquiry

我正在尝试做一个简单的重定向,在那里转到像
www.example.com/foo
这样的url将带我到
www.example.com/quokka/inquiry/ask.php?user=foo

出于测试目的,我从以下内容开始:

RewriteRule^(m.*)$/quokka/inquiry/ask.php?user=$1

这对于foo以字母m开头的用例非常有用,但我希望它是超级可定制的。因此,我将此重定向(注意删除字母m):

RewriteRule^(.*)$/quokka/inquiry/ask.php?user=$1

为什么上面的重写规则不适用于
foo
的任何实例?我相信我的正则表达式有问题

任何帮助都将不胜感激

根据
.htaccess
文件中的其他指令,这可能会导致内部重写循环,从而导致URL无法正确解析(是否出现500内部服务器错误?)。或者,充其量是对
/qookka/inquiry/ask.php?user=qookka/inquiry/ask.php的无效重写

旁白:请注意,正如前面提到的,这是一个内部重写,而不是严格意义上的“重定向”,正如您在问题中所说的。术语“重定向”通常指“外部3xx重定向”。(尽管无可否认,Apache文档也混淆了这些术语,但至少将其定义为“内部重定向”。)

在上述指令的情况下,重写的URL也由
^(.*)$
模式(捕获任何内容)捕获,这会导致类似以下内容的循环:

  • 请求:
    www.example.com/foo
  • 重写为:
    /quokka/inquiry/ask.php?user=foo
  • 重写为:
    /quokka/inquiry/ask.php?user=quokka/inquiry/ask.php
  • 重写为:
    /quokka/inquiry/ask.php?user=quokka/inquiry/ask.php
  • :
  • URL重写在到达
    .htaccess
    文件末尾时不会停止。处理循环,直到URL不变地通过。(虽然被视为“更改”的内容并不总是完全清楚,因为您可以通过重写URL获得循环,即使重写的URL相同,如上面的第4步所述。)

    模式
    ^(m.*$
    “有效”,因为重写的URL不是以“m”开头的。但是,如果您有一个以“m”开头的其他URL,那么这些URL也将被重写并变得不可访问

    您需要有一个只捕获“用户ID”的唯一URL(在本例中)。例如,所有引用“用户ID”的URL都可以有特定的前缀,例如
    example.com/u/

    或者可能具有与任何其他URL不冲突的最大长度(例如,在3到8个字符之间):

    此外,如果您对用户ID的格式有尽可能多的限制,那么这也就足够了。例如,只有小写字母:

    RewriteRule ^([a-z]+)$ /quokka/inquiry/ask.php?user=$1
    
    然而,使用前缀和限制(regex应该总是尽可能地限制)将是我的首选,因为它可以避免将来潜在的冲突。例如:

    RewriteRule ^u/([a-z]{3,8})$ /quokka/inquiry/ask.php?user=$1 [L]
    

    另外,包括
    L
    标志,以确保不会处理立即遵循的其他指令。

    非常感谢您的回答和指导。通过向重写规则添加以下内容,我可以解决我的错误:
    ^/ask(.*)$
    RewriteRule ^(.{3,8})$ /quokka/inquiry/ask.php?user=$1
    
    RewriteRule ^([a-z]+)$ /quokka/inquiry/ask.php?user=$1
    
    RewriteRule ^u/([a-z]{3,8})$ /quokka/inquiry/ask.php?user=$1 [L]