为什么PHP区分.php和.abc扩展用于缓存?

时间:2010-12-21 19:16:11

标签: php validation caching cache-control if-modified-since

PHP引擎如何处理仅在文件扩展名方面不同的相同文件之间似乎存在问题。

问题:“If-Modified-Since条件请求返回完整内容不变。”

此外,我测量.php扩展加载比带有.xxx扩展名的identitcal twin要快得多,即使文件内容相同,并且它们的文件扩展名也不同。

alt text

alt text

  

“HTTP允许客户端制作   条件请求,看是否复制   他们持有的仍然有效。以来   此响应具有Last-Modified   标题,客户端应该可以使用   一个If-Modified-Since请求标头   用于验证。 RED已经做到了这一点   发现资源发送完整   即使没有,也会做出回应   改变了,表明它没有   支持Last-Modified验证。“


.php

结尾的主页

alt text


完全相同的文件,但结尾为.ast

alt text


鉴于:

将home.php文件复制为home.xxx,并将此扩展名添加到htaccess,以将其识别为PHP文件。 .php文件监听php.ini,其中新鲜度设置为3小时,非.php文件必须监听htaccess,其中新鲜度设置为2小时,根据:

AddType application/x-httpd-php .php .ast .abc .xxx .etc

<IfModule mod_headers.c>
    ExpiresActive On
    ExpiresDefault M2419200
    Header unset ETag
    FileETag None
    Header unset Pragma
    Header set Cache-Control "max-age=2419200"

    ##### DYNAMIC PAGES
    <FilesMatch "\\.(ast|php|abc|xxx)$">
        ExpiresDefault M7200
        Header set Cache-Control "public, max-age=7200"
    </FilesMatch>
</IfModule>

到目前为止一切都很好并且所有东西都加载了,除非,非php文件没有正确缓存,或者它确实缓存但不能很好地验证,更具体。见附件图片。只有非php文件扩展名才会导致错误并加载更慢。

整个page.php的加载速度更快,因为其中的所有元素都会从缓存中正确加载,而page.abc在缓存时会返回完整的请求,这意味着整个页面速度较慢。

底线:应该更改什么,以便消除If-Modified-Since条件请求返回完整内容不变?

1 个答案:

答案 0 :(得分:2)

似乎您的服务器无法确定如何解码扩展,因为它不是.php。即使你在你的httpacess中定义了扩展名被识别为php,它仍然需要一些额外的步骤来让服务器处理页面,这意味着它总是需要更长的时间,然后只使用.php(虽然它应该只有几毫秒的差异,很可能是服务器问题导致这需要更长的时间)。为什么不在您的网页上使用.php扩展名?你为什么需要.abc?最好只使用默认扩展名而不是屏蔽它。

编辑:将此功能放在每个页面的顶部,它将检测用户所在的域名,剥离www和域扩展名,然后仅显示该特定域名的内容。您可以为每个域名使用相同的.php文件,而不必进行任何时髦的扩展。

<?php
$domain = explode(".", $_SERVER['SERVER_NAME']);
if ($domain[2]) {
    $domainName = $domain[1];
}
else {
    $domainName = $domain[0];
}

if ($domainName = "YourDomainNameWithNoExtension") {
    echo "Welcome to $domainName";
}
?>