1

別のフォルダー内の名前に基づいて、見つからない CSS ファイルを別の場所にリダイレクトする Apache のルールが必要です。このような:

  • リクエスト:localhost/css/nonexistent.css
  • 応答:localhost/css/g/nonexistent.css

CSS が存在する場合は、通常どおりに提供します。

  • リクエスト:localhost/css/existent.css
  • 応答:localhost/css/existent.css

私のプロジェクトは、デフォルトで次のルールが付属している CakePHP を使用しています。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L] 

新しいルールが何であれ、Cake のルールを破ってはならないので、私はそれについて言及します。

助けてくれてありがとう。

編集:ファイルが新しいcssファイルを生成してエコーcss/g/するスクリプト(Cake MVCスタック内)のエイリアスであることを忘れていました。これまでの回答はリダイレクトをうまく行っているようですが、実際には存在しないため、どちらも見つかりません。css/g/file.css

4

2 に答える 2

3

これは、このSOの質問Apachemod_rewriteのドキュメントから採用された書き換えルールです。

要点は次のとおりです。リクエストがで始まるパスに対するものである場合は、リクエストされた/css/ファイルのファイルシステムパスを取得し、それが存在するかどうかを確認します。idが正しくない場合は、より深いディレクトリのURLを書き直してください。これは、質問に投稿したルールの前に配置する必要があります。

RewriteCond %{REQUEST_URI} ^/css/
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteRule ^/css/(.*) /css/g/$1
于 2012-07-13T07:17:25.987 に答える
2

You can try first checking if the /css/g/ css file exists:

# Make sure it doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
# Make sure this is a request for a css file:
RewriteCond %{REQUEST_URI} ^/css/(.*)\.css$
# See if the /g/ version exists
RewriteCond %{DOCUMENT_ROOT}/css/g/%1.css -f
# rewrite if all conditions satisfied
RewriteRule ^css/(.*)$ /css/g/$1 [L]

The %1 in the 3rd condition backreferences the filename (sans .css extension) matched in the previous RewriteCond.


EDIT:

If the file css file is actually generated, then skip the checking of /g/ version and just pass it to the controller:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/css/(.*)\.css$
RewriteRule ^css/(.*)$ index.php/css/g/$1 [L]
于 2012-07-13T07:09:18.350 に答える