Apache站点加载缓慢,可能允许重写或重写问题

Apache站点加载缓慢,可能允许重写或重写问题,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我发现我的网站加载第一个页面的速度很慢,但在加载之后就很好了,一些apache配置的实验表明可能存在以下问题之一: AllowOverride-我知道将AllowOverride设置为All会降低站点的速度,因为它会在每个文件夹中查找.htaccess文件,因此我将配置移动到虚拟主机文件中,并使AllowOverride None关闭.htaccess文件,这最初似乎解决了问题,但当我再次尝试时,问题又出现了,所以可能不是这样 我删除了AllowOverride行,因此它默认返回到该行的默认设置

我发现我的网站加载第一个页面的速度很慢,但在加载之后就很好了,一些apache配置的实验表明可能存在以下问题之一:

  • AllowOverride-我知道将AllowOverride设置为All会降低站点的速度,因为它会在每个文件夹中查找.htaccess文件,因此我将配置移动到虚拟主机文件中,并使AllowOverride None关闭.htaccess文件,这最初似乎解决了问题,但当我再次尝试时,问题又出现了,所以可能不是这样

  • 我删除了AllowOverride行,因此它默认返回到该行的默认设置(无)。这似乎有帮助,但它仍然时常发生

  • 重写规则可能是:

    RewriteEngine On              
    
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?example\.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !google. [NC]
    RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
    RewriteCond %{HTTP_REFERER} !msn. [NC]
    RewriteCond %{HTTP_REFERER} !yahoo. [NC]
    RewriteRule ^.*$ - [F]    
    
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    
  • 然而,有些网站不使用这个,事实上甚至不使用重写,而且速度仍然很慢,所以这似乎也不是问题所在

    有什么想法吗

    编辑:

    这不是网站的问题,因为即使是只有“Hello World”的简单HTML也有问题


    它在Apache的早期版本上运行得很好,但自从升级到2.4之后(当很多事情发生变化,特别是配置发生变化时),它变得很慢。

    我在使用Apache和RewriteRule加载CSS、JS和其他静态文件时遇到了一些问题。如果您也有此问题,请咨询Chrome的开发者工具>网络。在我的例子中,.php的渲染速度很快,但随后我不得不等待10秒以加载.css文件!如果这对你来说是一样的,我的修复可能也会对你有效。由于您声明第一次加载很慢,而后面的加载很快(在浏览器中缓存css文件),我想它会:)

    与其让RewriteRule引擎处理所有静态文件,还不如重写静态文件名…:

    RewriteRule ^.*\.(jpg|gif|png|js|css|pdf|eot|woff|ttf|svg|ico)$ /$0 [L]
    
    。。。最好不要麻烦重写规则引擎处理静态文件名:

    RewriteCond $0 !\.(jpg|gif|png|js|css|pdf|eot|woff|ttf|svg|ico|html)$
    
    在您的例子中,您没有针对静态文件的重写规则,但也没有重写条件,因此我猜所有请求都只是传递给重写规则引擎

    顺便说一句,我不知道为什么用Apache(2.4)通过RewriteRule加载静态文件会出现这样的问题。有人吗


    希望这对你也有帮助

    “…加载第一页很慢,但之后就可以了…”您找错地方了。开始使用Firebug/Pagespeed或equiv来整理你的内容缓存。我想你误解了,延迟是在你到达网站之前,就像服务器问题一样。当站点加载速度很快时,您可以毫无问题地四处移动。首先加载一个只有“hello world”的网站甚至很慢,问题不在于内容。你是否托管在共享服务上?如果它是你自己的服务器,那么可以选择使用
    strace
    来计时发生了什么。我有一个测试虚拟机,它广泛地反映了我的产品堆栈,我使用strace很好地解决了类似这样的问题。例如,虽然我发现在调试器模式下启动Apache更容易做到这一点,但我将其降级为Apache 2.2,并且它似乎已得到解决,因此它似乎是一个2.4问题