9

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

问题:“一个 If-Modified-Since 条件请求返回的全部内容没有改变。”

此外,我测量到 .php 扩展名的加载速度比具有 .xxx 扩展名的相同双胞胎快得多,即使文件内容相同,它们仅在文件扩展名上有所不同。

替代文字

替代文字

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


首页以.php

替代文字


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

替代文字


鉴于:

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

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 条件请求?

4

1 回答 1

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";
}
?>
于 2010-12-21T20:40:44.137 回答