Regex 重写规则:^vs^(.*)$vs^.*$有区别吗?
在重写规则中使用Regex 重写规则:^vs^(.*)$vs^.*$有区别吗?,regex,mod-rewrite,Regex,Mod Rewrite,在重写规则中使用^与^(.*)$与^.*$作为通配符有什么区别 我的目标是重定向(任何内容)到的登录(默认)页面。我找到了以下解决方案,它们似乎都很有效,所以我想知道哪一种对性能更好 RewriteRule ^ http://carnarian.com/ [R=301,L] RewriteRule ^.*$ http://carnarian.com/ [R=301,L] RewriteRule ^(.*)$ http://carnarian.com/ [R=301,L] 所有这些似乎都很有效。
^
与^(.*)$
与^.*$
作为通配符有什么区别
我的目标是重定向(任何内容)到的登录(默认)页面。我找到了以下解决方案,它们似乎都很有效,所以我想知道哪一种对性能更好
RewriteRule ^ http://carnarian.com/ [R=301,L]
RewriteRule ^.*$ http://carnarian.com/ [R=301,L]
RewriteRule ^(.*)$ http://carnarian.com/ [R=301,L]
所有这些似乎都很有效。这是我在StackOverflow上的第一篇文章,大多数时候我只要搜索一下就可以找到答案
需要明确的是:my.htaccess中的RewriteRule是一个RewriteCond和WWW处理程序,如下所示:
RewriteEngine On
RewriteBase /
# FROM www. --TO-- NO www. See no-www.org
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTP_HOST} carnarianism\.com$ [NC]
########## The Above Questioned RewriteRule ??? ##########
RewriteRule ^ http://carnarian.com/ [R=301,L]
注意:我从以下内容开始搜索,但我不想要以下内容,因为路径也被传递了,我希望它只转到登录页。因此,我知道您需要括号才能使用$1变量。我不想要$1变量
RewriteRule ^(.*)$ http://carnarian.com/$1 [R=301,L]
使原始URL无法作为反向引用访问<代码>$0是一个空字符串^
将整个原始URL作为^.*$
反向引用进行访问(因此您可以执行$0
)http://example.com/oldurl.php?url=$0
使整个原始URL可以作为^(.*)
和$0
反向引用访问;它通常在您希望在替换中实际使用旧URL时使用,因为它的使用更明确$1
它们都匹配相同的东西,但产生不同的反向参考组。性能更好的是您自己进行基准测试的组 但是,由于您使用的是
.htaccess
文件,而不是仅解析一次的服务器(可能通过VirtualHost?)中的此配置,因此这并不重要。在每次请求时解析.htaccess
文件要比执行正则表达式耗费数千倍的时间
如果您关心性能,则永远不要使用.htaccess
文件,甚至不要使用:AllowOverride None
禁用它们的解析。不禁用它们,并有如下请求:http://example.com/sites/css/theme/main.css
Apache仍将尝试加载以下所有文件:
.htaccess
sites/.htaccess
sites/css/.htaccess
sites/css/theme/.htaccess
.htaccess
文件中改进您的重写规则就像在大海中打喷嚏,希望能让它不那么咸。:)
现在,如果您改进了设置以使用服务器配置并回答原始问题:^.*$
可能比^(.*)$
更有效,因为需要创建的引用更少。然而,你很有可能无法测量它。你已经回答了自己的问题:“[…]你需要括号才能使用$1变量。”哪一个对性能更好?
没有什么有意义的区别。您列出的选项之间的差异将远远低于请求时间的1%。绝大多数将是TCP开销等@Phil这解释了如何使用$1变量。最后一行清楚地表明“我不想要$1变量。”@Gumbo如前所述,所有三个重写规则都有效(它们实际上取自我实际阅读和研究的几十篇StackOverflow帖子)。问题是,上面三条规则的区别是什么。演出速度他们不平等吗?(就像我错过了什么吗?)为什么有些人推荐这三条规则中的一条而不是另外两条?