Php .htaccess%{REQUEST_URI}尾部斜杠和Zend缓存
我有一个php缓存系统(基于Zend静态缓存)。。。它从动态页面创建静态html文件。它使用请求URI来创建文件名。 对于像这样的请求\u URI/somedir/otherdir/file.html 它在缓存目录(在我的服务器上)中创建一个文件,如/cached/somedir/otherdir/file.html 然后,我使用htaccess将未来的请求重定向到静态文件(如果存在):Php .htaccess%{REQUEST_URI}尾部斜杠和Zend缓存,php,zend-framework,.htaccess,Php,Zend Framework,.htaccess,我有一个php缓存系统(基于Zend静态缓存)。。。它从动态页面创建静态html文件。它使用请求URI来创建文件名。 对于像这样的请求\u URI/somedir/otherdir/file.html 它在缓存目录(在我的服务器上)中创建一个文件,如/cached/somedir/otherdir/file.html 然后,我使用htaccess将未来的请求重定向到静态文件(如果存在): RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.ht
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.html -f
RewriteRule .* /cached/%{REQUEST_URI}\.html [L]
我遇到的问题是,当请求以“/”(基本目录)结尾时,缓存会生成一个名为directory.html的文件
因此,如果请求的URI是/thedirectory/。。。我得到一个缓存了这个文件/thedirectory.html的文件
我如何将这样的请求重定向到正确的文件
谢谢。
PS:我基本上遵循了实现缓存的方法。我只在自定义php应用程序上使用Zend缓存文件
编辑:
我想如果不编辑php文件,就没有好的方法来实现这一点。
以下是我如何使用Zend Cache:
$tagCache = Zend_Cache::factory('Core', 'File', array('automatic_serialization' => true),
array('cache_dir' => $cfg['instdir']. 'Cache_dir'));
$cache = Zend_Cache::factory('Capture', 'Static', array(), array('public_dir' => $cfg['instdir']. 'Cached/',
'tag_cache' => $tagCache));
$id = bin2hex($name);
$cache->start($id, array());
有人知道哪些文件可能包含生成缓存文件名的代码吗?我编辑了几个前端和后端,但似乎什么都没发生
我正在尝试这样做(就在ZEND获得请求URI之前):
{
$\u SERVER[“REQUEST\u URI”]=$\u SERVER[“REQUEST\u URI”]“index.html”
}
也要使缓存为目录添加index.html文件。尝试按如下方式排除目录
#only if it is not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.html -f
RewriteRule .* /cached/%{REQUEST_URI}\.html [L]
编辑
我需要一个以/结尾的{REQUEST_URI}重定向到一个文件,该文件正好是{REQUEST_URI},没有最后一个/(和一个.html结尾) 尝试在.htaccess中的任何现有规则之前添加此规则
#redirect all requests with a trailing slash to the html versions
RewriteRule ^(.+)/$ $1.html [L,R=301]
它不起作用,因为{REQUEST_URI}以/…结尾,而我的文件不。。。它将重定向到somedir/.html…但than甚至不是正确的文件名。我需要一个以/结尾的{REQUEST\u URI}重定向到一个完全是{REQUEST\u URI}的文件,没有最后一个/(和结尾的.html)谢谢@Ulrich。。。。但我不想更改URL。。。永久重定向到新的重定向。@lansen如果要跳过重定向,请删除
R=301
,即将规则更改为只RewriteRule^(+)/$$1.html[L]
?您的意思是cached/thedirectory/.html
?没有php会删除/where。。。我现在正在查Zend的档案。你有没有找到这个@Iansen?现在有同样的问题。
#redirect all requests with a trailing slash to the html versions
RewriteRule ^(.+)/$ $1.html [L,R=301]