.htaccess%{REQUEST_URI}スラッシュとZendキャッシュ

私はPHPのキャッシュシステム(Zend Static Cacheに基づいている)...動的ページから静的なHTMLファイルを作成します。 REQUEST_URIを使用してファイル名を作成します。 このようなREQUEST_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]

私が抱えている問題は、REQUEST_URIが "/"(基本的にディレクトリ)で終わると、キャッシュはthedirectory.htmlという名前のファイルを生成するということです。

したがって、REQUEST_URIが/ thedirectory/...の場合、このファイルは/directory.htmlにキャッシュされます。

このような要求を適切なファイルにリダイレクトするにはどうすればよいでしょうか。

Thanks. PS: I've basically followed this article to implement my cache. I'm using the Zend Cache files only on a custom PHP app.

編集:

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がREQUEST_URIを取得する直前に)何かをしようとしています:

if(substr($_SERVER["REQUEST_URI"],strlen($_SERVER["REQUEST_URI"])-1,1)=="/")

{

$ _SERVER ["REQUEST_URI"] = $ _ SERVER ["REQUEST_URI"]。 "index.html";

}

また、キャッシュにディレクトリ用のindex.htmlファイルを追加します。

2
あなたはこれを@Iansenから見つけましたか?今、同じ問題がある。
追加された 著者 Jonny White,
cached/thedirectory/.html という意味ではありませんか?
追加された 著者 Gerben,
PHPは/どこかで削除しません...私はZendファイルを探しています。
追加された 著者 Iansen,

1 答え

以下のようにディレクトリを除外してみてください

#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}で終わる必要があります。最後に/(および最後に.html)のない{REQUEST_URI}のファイルにリダイレクトする必要があります。

.htaccess内の既存のルールの前にこのルールを追加してみてください

#redirect all requests with a trailing slash to the html versions
RewriteRule ^(.+)/$  $1.html [L,R=301] 
1
追加された
@Iansenは最後の編集を見る
追加された 著者 Ulrich Palha,
@lansenリダイレクトをスキップする場合は、 R = 301 を削除する、つまりルールを RewriteRule ^(。+)/ $ $ 1.html [L]
追加された 著者 Ulrich Palha,
{REQUEST_URI}は/で終わり、私のファイルは... somedir/.htmlにリダイレクトされますが、正しいファイル名ではないので動作しません。
追加された 著者 Iansen,
{REQUEST_URI}が/で終わる必要があります。最後に/と(最後に.htmlがない){REQUEST_URI}のファイルにリダイレクトする必要があります。
追加された 著者 Iansen,
ありがとう@Ulrich ....しかし、私はURLを変更したくありません...新しいものに永久にリダイレクトします。
追加された 著者 Iansen,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com