2016-10-12 12 views
0

私はProcessWire用のCache Pluginにいくつか問題がありますが、これはApacheの.htaccessの制限に関するもっとグローバルな質問です。htaccess "ファイルが存在する"と "mod_rewrite -f"が動作しない

例:

私はこのように私のページを呼び出す:http://example.com/foo の.htaccessファイルDOCUMENT_ROOT/cache/foo/index.html がある場合、ファイルが存在する場合は、ファイルを表示し、その後、ルックアップする、または必要があります - この例のために簡素化これはメートルで正常に動作します

cache/foo/index.html (some dummy content) 
bar (some dummy content) 
file-found.php (the success page with some print_r($_SERVER) stuff) 
.htaccess with this content: 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

: - ちょうど

例のファイル構造成功ページを呼び出しますyローカルマシン([SERVER_SOFTWARE] => Apache/2.4.18(Unix)) しかし、私が使いたいホスティングパッケージではありません。 ([SERVER_SOFTWARE] => Apache/2.2.31(Unix))サーバの反応はちょうど404です: "要求されたURL/fooはこのサーバ上に見つかりませんでした。

Apacheのバージョンのために動作しないのですか、またはホスティング業者によって制限されていますか?

Btw。 ModRewriteは基本的にこのホスティングで動作します。たとえば、次のように:私はhttp://example.com/barを呼び出す場合

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

、ファイルfound.phpはhtaccessファイル内のルール「ファイルは=>その後、存在する場合は、」代わりにこれを解決する方法

任意のアイデアが示されていますか?

ありがとうございました!


EDIT:さらに多くの簡略化:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{DOCUMENT_ROOT}/bar -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

がローカルに動作しますが、ホスティング事業者

+0

ライブサーバー上の '%{DOCUMENT_ROOT}'の値は何ですか? '%{DOCUMENT_ROOT}/cache/$ 1/index.html'は実際に存在しますか? – anubhava

答えて

0

に私は全体のフレーズがある場合RewriteCondに特殊文字が\(でエスケープされるべきであると思いません二重引用符ではない)

RewriteRule[L]などのフラグを追加しようとしましたか? 。

+0

アイデアをありがとうございますが、それはまだ機能しません、ごめんなさい。私もドットをエスケープしようとしましたが、何も変わりませんでした。ローカルでは動作しますが、ホスティングでは動作しません。 – Matthias

+0

rewriteRuleにフラグを追加しようとしましたか? –

+0

はい、何も変わりません。申し訳ありません。私にとっては 'RewriteCond'が問題であると感じています。実際の例では' RewriteRule'は何の問題もないからです。 – Matthias

0

(あなたがRewriteBase /を必要とするかもしれない)、これを試してみてください:

RewriteCond cache%{REQUEST_URI}/index.html -f 
RewriteRule ^[^/]+(?:/[^/]+)*$ cache/$0/index.html [L] 
RewriteCond cache%{REQUEST_URI}index.html -f 
RewriteRule ^(?:[^/]+/)*$ cache/$0index.html [L] 
関連する問題