Regex模式帮助(我差不多有了,只需要一点专业知识就可以完成)
我需要匹配两个箱子Regex模式帮助(我差不多有了,只需要一点专业知识就可以完成),regex,.htaccess,redirect,Regex,.htaccess,Redirect,我需要匹配两个箱子 js/example_directory/example_name.js 及 (其中12345是长度未知的数字字符串,目录的深度可以无限或根本不存在) 在这两种情况下,我都需要捕获js/和.js 和如果存在?捕获?后的数字字符串 这就是我目前所拥有的 ^js/(.*).js\??(\d+)? 这是有效的,除了它还捕获 js/example_directory/example_name.js12345 我希望正则表达式忽略这一点。有什么建议吗? 谢谢大家! 测试你的模
js/example_directory/example_name.js
及
(其中12345是长度未知的数字字符串,目录的深度可以无限或根本不存在)
在这两种情况下,我都需要捕获js/
和.js
和如果存在
?
捕获?
后的数字字符串
这就是我目前所拥有的
^js/(.*).js\??(\d+)?
这是有效的,除了它还捕获
js/example_directory/example_name.js12345
我希望正则表达式忽略这一点。有什么建议吗?谢谢大家! 测试你的模式 回答:
使用Gumbo的信息,我的最终重写规则如下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^\d*$
RewriteRule ^js/(.*)\.js$ js.php?f=$1.js&v=%0 [L]
</IfModule>
重新启动发动机
重写基/
重写cond%{SCRIPT_FILENAME}-D
重写cond%{SCRIPT_FILENAME}-F
重写条件%{QUERY\u STRING}^\d*$
重写规则^js/(.*)\.js$js.php?f=$1.js&v=%0[L]
包括整个查询字符串模式,包括?在一个条件匹配中
^js/(.*).js(\?\d+)?
包括整个查询字符串模式,包括?在一个条件匹配中
^js/(.*).js(\?\d+)?
只测试URI路径,不测试查询。因此,使用如下规则已经匹配了两个URI:
RewriteRule ^js/(.*)\.js$ …
如果您现在也要测试查询,则需要使用附加的:
最后一次成功的RewriteCond
的匹配可以用%n
引用,因此在整个匹配%0
的情况下,或者在这种情况下,甚至只直接%{QUERY\u STRING}
。只测试URI路径,而不测试查询。因此,使用如下规则已经匹配了两个URI:
RewriteRule ^js/(.*)\.js$ …
如果您现在也要测试查询,则需要使用附加的:
最后一个成功的
RewriteCond
的匹配可以用%n
引用,因此在整个匹配%0
的情况下,或者在这种情况下,甚至只是直接%{QUERY\u STRING}
。就正则表达式而言-您可以使用(?:)
(非捕获分组)将\?(\d+)作为一个标记,例如:
^js/(.*).js(?:\?(\d+))?
您确实不需要使用
?:
(非捕获)部分,但是如果您不这样做,反向引用将被更改-1将指向文件名,2将指向?1234
,3将是1234
(非捕获分组),就正则表达式而言-您可以使用(?:)
(非捕获分组)来生成\?(\d+)作为一个傻瓜,可以这样选择:
^js/(.*).js(?:\?(\d+))?
您确实不需要<使用
?:
(非捕获)部分,但如果不这样做,反向引用将被更改-1将指向文件名,2将指向?1234
,3将是1234
您到底使用了什么?mod_rewrite(RewriteRule
),mod_别名(RedirectMatch
)或者什么?你到底用什么?mod_rewrite(RewriteRule
),mod_别名(RedirectMatch
)或者什么?Gumbo,有没有办法使重写条件成为可选的。这样地;如果查询存在,请使用数字,如果不存在,请继续。我也不理解您对%n的评论,如果您能提供更多信息,我将不胜感激。@Mohammad:使用^\d*$
已经允许空查询;但如果是,它需要是数字。和%n
(其中n是0-9中的数字)用于引用整个正则表达式的匹配(%0
)或仅引用特定组的匹配(%n
是第n组的匹配)。Gumbo,谢谢!我已经用我使用的最后一条规则更新了这个问题。请看是否有任何需要改进的地方。再次感谢,Gumbo,有没有办法让重写条件成为可选的。这样地;如果查询存在,请使用数字,如果不存在,请继续。我也不理解您对%n的评论,如果您能提供更多信息,我将不胜感激。@Mohammad:使用^\d*$
已经允许空查询;但如果是,它需要是数字。和%n
(其中n是0-9中的数字)用于引用整个正则表达式的匹配(%0
)或仅引用特定组的匹配(%n
是第n组的匹配)。Gumbo,谢谢!我已经用我使用的最后一条规则更新了这个问题。请看是否有任何需要改进的地方。再次感谢你。