0

プロジェクトに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 つの行に間違いが見つかりません。助けてください。

4

1 に答える 1