Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 重写规则:^vs^(.*)$vs^.*$有区别吗?_Regex_Mod Rewrite - Fatal编程技术网

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
    $1
    反向引用访问;它通常在您希望在替换中实际使用旧URL时使用,因为它的使用更明确

它们都匹配相同的东西,但产生不同的反向参考组。

性能更好的是您自己进行基准测试的组

但是,由于您使用的是
.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帖子)。问题是,上面三条规则的区别是什么。演出速度他们不平等吗?(就像我错过了什么吗?)为什么有些人推荐这三条规则中的一条而不是另外两条?