8

にウェブサイトがありexample.com/test/ます。Web サイトが次のようにレイアウトされているとしましょう。

example.com
└── test/
    ├── assets/
    │   └─ stylesheet.css
    │
    ├── .htaccess
    └── index.php

index.phpここにルーターがあります。これは、最近は明らかにクールです。

ユーザーが のようなページを要求するたびに、そのファイルがあるexample.com/test/stylesheet.cssかどうかを確認し、ある場合assets/は、に URL を渡す代わりにそのファイルを提供しますindex.php。理想的には、次のように動作します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond assets/%{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ assets/$1

しかし、%{REQUEST_FILENAME}は絶対パスなので、 のassets/%{REQUEST_FILENAME}ようなものになりますassets/home/public/test/stylesheet.css%{REQUEST_URI}に変わりますassets/test/stylesheet.cssthis questionも見ましたが、答えもうまくいきませんでした。

PHPに頼らずにこれを行う方法はありますか? (そうでない場合は、PHP の を使用しますがreadfile、LFI などについて心配する必要はありません。)

4

1 に答える 1

9

the %{DOCUMENT_ROOT}%{REQUEST_URI}変数を使用してみてください

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/assets/%{REQUEST_URI} -f
RewriteRule ^(.+)$ assets/$1

編集:なるほど、代わりにこれを試してください:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%1/assets/%2 -f
RewriteRule ^(.*)$ /%1/assets/%2 [L,R]
于 2012-08-20T01:48:07.157 に答える