0

我正在使用以下代码重写对动态生成的 PHP 页面的压缩、缓存静态版本的页面请求。我有两个问题:

RewriteCond %{REQUEST_URI} !^/?cache/ [NC]
RewriteRule ^/?(.)(.*?)/?$ /cache/$1/$1$2.html.gz [L]
  1. 首先,我只希望这个规则在缓存文件确实存在的情况下生效。
  2. 其次,我需要确保浏览器被指示这是一个应该被解压缩、读取和显示的 gzip 文件,而不是像当前正在发生的文件那样应该下载的文件。

页面的url结构如下:

http://mydomain.com/newest-coupon-codes/

它需要在不将地址栏更改为文本的情况下向用户显示以下页面:

http://mydomain.com/cache/n/newest-coupon-codes.html.gz
4

1 回答 1

1

解决方案#1:

<FilesMatch "\.html\.gz$">
  ForceType text/html
  Header set Content-Encoding: gzip
</FilesMatch>

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !\?
RewriteCond %{REQUEST_URI} !^/?cache/ [NC]
RewriteCond %{REQUEST_URI} ^/?(.)(.*?)/?$
RewriteCond cache/%1/%1%2.html.gz -f
RewriteRule ^/?(.)(.*?)/?$ /cache/$1/$1$2.html.gz [L]

解决方案#2:

<FilesMatch "\.html\.gz$">
  ForceType text/html
  Header set Content-Encoding: gzip
</FilesMatch>

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !\?
RewriteCond %{REQUEST_URI} !^/?cache/ [NC]
RewriteCond %{REQUEST_URI} ^/?(.)(.*?)/?$ [E=CACHE:"cache/$1/$1$2.html.gz",NE]
RewriteCond %{ENV:CACHE} -f
RewriteRule ^/?(.)(.*?)/?$ /cache/$1/$1$2.html.gz [E=!CACHE,L]
于 2012-11-09T01:43:21.010 回答