htaccess - 显示缓存文件(如果存在),如果不存在,则显示原始文件

时间:2017-05-28 04:28:29

标签: regex .htaccess mod-rewrite

我和这个问题的要求相同 - htaccess->show file if in cache directory, if not continue但唯一的区别是,提供给该问题的解决方案在我的案例中不起作用。

要求:

显示缓存文件夹中的缓存文件(如果存在)。

例如:

domain.com/abc/def/the_file(请求的页面)

domain.com/cache/abc/def/the_file.html(缓存版本)

在这里,the_file实际上是一个现有的PHP文件(the_file.php),当URL包含the_file时,它由重写规则处理。

我认为由于我已经在htaccess文件中已经拥有的当前htaccess规则,解决方案无法正常工作,但是,我无法弄清楚是什么导致它无法正常工作。

非常感谢任何帮助。

htaccess文件:

RewriteEngine On

# RewriteBase equivalent - Production
RewriteCond %{HTTP_HOST} !^localhost$
RewriteRule . - [E=REWRITEBASE:/]

# RewriteBase equivalent - Development
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule . - [E=REWRITEBASE:/projects/projectname/]

# Block Directory Listing
Options -Indexes

# 404 Page
ErrorDocument 404 /inc/404.php

# Redirecting index.php to base directory
RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L,QSA]

# Removing trailing slash from URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ %{ENV:REWRITEBASE}$1 [R=301]

# To externally redirect /dir/abc.php to /dir/abc
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)/?$ $1.php [QSA,NC,L]

### Serving Cached Files if Exists
# check if the file exists in cache dir
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}cache/$1.html -f
RewriteRule ^(.+?)/?$ /cache/$1.html [L]

注意:我在生产版本上测试这个东西,因为%{DOCUMENT_ROOT}变量值在XAMPP localhost上会有所不同。

0 个答案:

没有答案