为什么PHP在缓存方面区分.PHP和.abc扩展?

为什么PHP在缓存方面区分.PHP和.abc扩展?,php,validation,caching,cache-control,if-modified-since,Php,Validation,Caching,Cache Control,If Modified Since,PHP引擎如何处理仅在文件扩展名上不同的相同文件之间似乎存在问题 问题:“If-Modified-Since条件请求返回未更改的完整内容。” 此外,我还测量到,.php扩展名的加载速度比带有.xxx扩展名的identical twin快得多,即使文件内容相同,但它们只是在文件扩展名上有所不同 “HTTP允许客户端 有条件请求,以查看是否存在副本 他们持有的仍然有效 此响应具有最后修改的 头,客户端应该能够使用 If-Modified-Since请求头 用于验证。RED已完成此操作,并且 发现

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

问题:“If-Modified-Since条件请求返回未更改的完整内容。”

此外,我还测量到,.php扩展名的加载速度比带有.xxx扩展名的identical twin快得多,即使文件内容相同,但它们只是在文件扩展名上有所不同

“HTTP允许客户端 有条件请求,以查看是否存在副本 他们持有的仍然有效 此响应具有最后修改的 头,客户端应该能够使用 If-Modified-Since请求头 用于验证。RED已完成此操作,并且 发现资源发送了一个完整的 即使它没有回应 已更改,表示没有更改 支持上次修改的验证。“


主页以
.php


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


给定:

home.php文件被复制为home.xxx,该扩展名被添加到htaccess中,以将其识别为php文件。.php文件要听php.ini,其中freshness设置为3小时,而非.php文件要听htaccess,其中freshness设置为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>
AddType应用程序/x-httpd-php.php.ast.abc.xxx.etc
过期于
到期默认M2419200
标题未设置ETag
FileTag无
标题未设置Pragma
标题集缓存控制“最大年龄=2419200”
#####动态页面
ExpiresDefault M7200
标题集缓存控制“公共,最大年龄=7200”
到目前为止,一切都很好,只是非php文件缓存不正确,或者缓存很好,但验证不好,更具体地说。见所附图片。只有非php文件扩展名会导致错误并降低加载速度

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


一句话:为了消除返回完整内容的If-Modified-Since条件请求,应该更改哪些内容?

似乎您的服务器在确定如何解码扩展时遇到了问题,因为它不是.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";
}
?>


是否向客户端公开php扩展?多么罕见的行为啊@上校:谢谢你的快速评论!你的意思是红色的标题在现实中没有被发送给他们?向客户端公开php扩展是什么意思?在我的例子中,我在哪里可以检查这是真是假?对于xxx扩展,dnnno,但是对于php脚本,您必须实现有条件的get programmaticallyfile更改对于动态生成的内容并不重要。我想你的问题与主人有关。我想这是你正在使用的某种共享主机?哦,看,更多的手绘圆圈。甚至还有一个带点的!非常感谢Kp的建设性、有意义和有用的指导!事实上,其他一切都是一样的,除了更改后的三个字母的扩展名不是默认的。php显然存在一个隐藏得很深且不容易修复的惩罚(建设性的、有用的答案的空白令人遗憾地证明了这一点)我们必须使用这些扩展名的原因,是因为使用多个域别名都指向同一根。每个页面都可以有自己的同名页面,例如ABC.com>
contact.ABC
XYZ.com>
contact.XYZ
等,在我们的情况下,所有页面最好保存在根目录中。。。想法?@Sam使用不同的文件扩展名是一个非常糟糕的理由。为什么每个站点没有自己的目录,而不是将所有文件转储到一个目录中?这听起来像是组织的噩梦。将此功能放在每个页面的顶部,它将检测使用的域名,然后仅显示该特定域名的内容。您可以对每个域名使用相同的.php文件,而不必进行任何时髦的扩展。