如何在重写url时检查mod_rewrite花费的时间?

时间:2014-02-25 11:25:21

标签: apache .htaccess mod-rewrite

我的问题很简单:

是否可以知道apache mod_rewrite重写网址时所经过的时间?

我的网站每月有大约2000万个请求。

在这种情况下,我想知道在这些规则中花费的时间。

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /

  # Remove Multiple slashes in betweeen
  RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
  RewriteRule . %1/%2 [R=301,L]

  # Send everything to index.php
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ some_path/index.php/$1 [L]

</IfModule>



提前致谢

2 个答案:

答案 0 :(得分:1)

您可以检查Firebug或其他浏览器工具中的“等待”时间,以检查请求与浏览器实际接收数据之间花费的时间。

重定向到静态资源当然最好避免评估PHP处理请求所花费的时间。

然而,它仍将包括Apache通常用于处理请求的时间,您可能希望测试两种情况:使用重定向和不使用。

顺便说一句,如果你想要优化这些,你可以尝试替换它:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

有了这个:

RewriteRule ^(.*)//(.*)$ $1/$2 [R=301,L]

没有必要单独使用这种重写,更复杂的重写规则就足够了。

此外,

RewriteRule ^(.*)$ some_path/index.php/$1 [L]

可以替换为

RewriteRule (.*) some_path/index.php/$1 [L]

开头和结尾字符不会以1美元的价格发送,因此它可以包含在规则中,从而简化了它。

答案 1 :(得分:1)

如果可能,将重写移至VirtualHost配置,因此不会为.htaccess中的每个请求编译正则表达式。 例如,对于Apache,在httpd.conf中放置.htaccess的内容,如下所示:

<Directory /www/htdocs/example>
    <IfModule mod_rewrite.c>

      RewriteEngine On
      RewriteBase /

      # Remove Multiple slashes in betweeen
      RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
      RewriteRule . %1/%2 [R=301,L]

      # Send everything to index.php
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ some_path/index.php/$1 [L]

    </IfModule>
</Directory>