2

良い一日、

私はこれについて多くの検索を行いましたが、決定的な答えを得ることができません。

ディレクトリのセットアップがあります:

/var/www/html/アルファ/ベータ/キャッシュ/デルタ

次のような URL が必要です。

http://localhost/alpha/beta/delta

cache/ を調べて、デルタ ディレクトリが存在することを確認し、そこにユーザーを転送します。一方、差分ディレクトリ (または含まれている index.html) が存在しない場合は、ユーザーを localhost/alpha/beta/index.php に転送します。

これは、alpha/beta/ にある私の htaccess ファイルです。

RewriteBase /alpha/beta/

# this next line is included because localhost/alpha/beta/ was forwarding to cache/
# there is probably a better way
RewriteCond $1 \w{1}
RewriteCond %{DOCUMENT_ROOT}/alpha/beta/cache/$1 -d
RewriteRule ^(.*)$ cache/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php

これは (かなり*) 機能しますが、私はこれを望んでいません。ソフトウェアを使用する人が含まれている .htaccess ファイルをいじる必要がないように、相対パスが必要です。

RewriteBase は RewriteCond に影響を与えると思っていましたが、そうではありません。%{DOCUMENT_ROOT} を削除すると、条件は明らかにファイル システム / ディレクトリの alpha/beta/cache/delta と照合しようとします。使用する

RewriteCond cache/$1 -d

また、相対ディレクトリに対してチェックされません。

/var/www/html/alpha/beta/delta/cache/delta/ を取得するため、条件付きで {REQUEST_URI} を使用できません

リクエストを含めずに、条件付きで使用するために現在のサブディレクトリを分離する方法を見つけることができません。

助けてください。私はロープの終わりにいます。

更新:使用する場合

RewriteCond cache/$1/index.html -F

動作しますが、書き換えログ エントリが非常に大きくなります。結果を達成するために多くの冗長なチェックを行っているように見えますが、それが良い解決策であるかどうかはわかりません.

  • alpha/beta/delta/ を使用すれば、すべて問題ありません。しかし、最後のスラッシュを省略すると、アドレスは alpha/beta/cache/delta/ に変わります。ディレクトリを使用したいのですが、URL を変更したくありません。
4

0 に答える 0