プロジェクトにappフォルダーとpublicフォルダーがあります。(css|im|js|lib)/ で始まるパスを public フォルダーにリダイレクトし、それ以外はすべて index.php ファイルにリダイレクトします。
たとえば、http: //mysite.com/css/s.css は SITE_ROOT/public/css/s.cssにリダイレクトし、 http: //mysite.com/absde は SITE_ROOT/index.php にリダイレクトする必要があります。
nginxの作業構成は次のとおりです。
server {
listen 80;
server_name mysite.com;
root /home/mysite/html;
location ~ \/(css|im|js|lib)\/ {
root /home/mysite/html/public;
expires 30;
try_files $uri =404;
}
location {
rewrite ^(.*)$ /index.php break;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
今、これを apache 用に書き直そうとします。.htaccess に次のように書きます。
RewriteEngine On
RewriteRule ^(css|im|js|lib)\/(.*)$ public/$1/$2 [L]
RewriteRule . index.php [L]
これは動作しません。RewriteRule らしい。index.php は 2 行目の前に適用されるため、すべてが index.php に移動します。しかし、なぜ?
3行目を変更しても何も変わりません
RewriteRule ^(.*)$ index.php [L]
つまり、方程式のタイプはルールの順序に影響しません。
そして、2行目の正規表現から^記号を削除した場合にのみ、サイトは期待どおりに機能し始めます。でも外したくない!現在、 http: //mysite.com/abcde/css/s.css は css/s.css に書き換えられていますが、そのようにすべきではありません。また、3行目を削除すると、2行目が機能し始めます(つまり、それ自体が正しいことを意味します)。
ばかばかしいほど単純ですが、これらの 3 つの行に間違いが見つかりません。助けてください。