【问题标题】:How to match quantifiers { 6, } in RewriteRules?如何匹配 RewriteRules 中的量词 { 6, }?
【发布时间】:2019-05-29 07:37:07
【问题描述】:

我做了一个匹配6个字符的文档名称的重写规则,它成功了。

RewriteRule ^document\/(.{6})\/?$ document/?name=$1 [NE,L]

由于我知道文档最多只能命名 12 个字符,因此我添加了一个最大长度量词。但是,使用它会产生 500 服务器错误:

RewriteRule ^document\/(.{6,12})\/?$ document/?name=$1 [NE,L]

事实上,我得到了以下结果:

(.{6}) 有效 (.{6,}) 故障 (.{6,7}) 作品 (.{6,8}) 作品 (.{6,9}) 故障 等等。

我还应该提到https://www.regexpal.com/?fam=109235 告诉我我的规则没有任何问题。但是我在使用时仍然收到 500 服务器错误。

谢谢@emma,要重写的示例 URL:

http://www.mywebsite.com/document/051201-22

http://www.mywebsite.com/document/051201-22/

【问题讨论】:

  • 当您尝试[^\/]{6,12} 时会发生什么?
  • 我不认为正则表达式测试重写规则
  • 如果我是你,我会从你的正则表达式中删除 BOS 锚^,因为它不会匹配“文档”前面的http://www.websited.com/。即使该部分被剥离,您也应该将插入符号从正则表达式中取出。
  • @sln ([^\/]{6}) 有效,([^\/]{6,12}) 错误
  • 你知道 Ben,至少你越来越接近于找出为什么你使用的引擎如此糟糕,对吧?

标签: regex .htaccess mod-rewrite apache2


【解决方案1】:

我不太确定你想如何编写这个 RewriteRule。但是,this tool 可能会帮助您首先找到表达式,然后编写和测试 RewriteRule。我很确定,您可以在不使用量词的情况下编写它。例如:

document\/([0-9]+)

将传递您的示例 URL。

然后,如果您只想将前六位数字替换为 name 变量,您可能需要编写类似于以下内容的 RewriteRule:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} mywebsite\.com [NC]
    RewriteRule document\/([0-9]+) document\/?name=$1 [NE,L]
</IfModule>

对于斜杠是或否,这些可能有效:

# No Trailing Slash Policy, if you wish no slash at the end of your URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]

# Trailing Slash Policy, if you wish to have a slash at the end of your URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1/ [L,R] # <- for test, for prod use [L,R=301]

【讨论】:

  • 我希望在重写之前,我可以限定请求的长度在 6 到 12 个字符之间。这样,如果 URL 不包含有效的文档名称,我可以使用另一个重写规则将它们发送到说明页面(或失败页面)。
【解决方案2】:

我认为您使用此设置进入了重定向循环。 添加RewritCond,检查请求中没有查询字符串

重写条件 %{QUERY_STRING} ^$

RewriteRule ^document/([^/]{6,12})/?$ document?name=$1 [NE,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2012-12-02
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多