我和这个问题的要求相同 - 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上会有所不同。