我的问题很简单:
是否可以知道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>
提前致谢
答案 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>