Php .htaccess%{REQUEST_URI}尾部斜杠和Zend缓存

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

我有一个php缓存系统(基于Zend静态缓存)。。。它从动态页面创建静态html文件。它使用请求URI来创建文件名。 对于像这样的请求\u URI/somedir/otherdir/file.html 它在缓存目录(在我的服务器上)中创建一个文件,如/cached/somedir/otherdir/file.html

然后,我使用htaccess将未来的请求重定向到静态文件(如果存在):

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]