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

Sam*_*Sam 9 php validation caching cache-control if-modified-since

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

问题:"If-Modified-Since条件请求返回完整内容不变."

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

替代文字

替代文字

"HTTP允许客户端发出条件请求以查看它们所持有的副本是否仍然有效.由于此响应具有Last-Modified标头,因此客户端应该能够使用If-Modified-Since请求标头进行验证.RED已完成这发现资源发送完整的响应,即使它没有改变,表明它不支持Last-Modified验证."


主页以.结尾 .php

替代文字


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

替代文字


鉴于:

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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kyl*_*yle 2

您的服务器似乎无法确定如何解码扩展名,因为它不是 .php。即使您在 httpaccess 中将扩展名定义为 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";
}
?>
Run Code Online (Sandbox Code Playgroud)