web-dev-qa-db-ja.com

index.phpを削除するための正しい書き直し構文

私はホストするnginxvHostを手に入れました:

  • _/_のCMS
  • _/store_のMagentoショップ

1つを除いて、問題はありません。

URLからindex.phpを削除します。現在、以下のURLが機能しています

_example.com/store/index.php/my-funny-test-product.html and (as there are a few subshops in magento) 
example.com/store/index.php/city/my-funny-test-product.html
_

次に、index.phpをURLから削除できるように、リダイレクトを作成する必要があります。

_example.com/store/my-funny-test-product.html or example.com/store/city/my-funny-test-product.html
_

この.htaccessを使用してローカルApacheで動作するようになりました

_RewriteEngine on
RewriteBase /store/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php [L]
_

これに基づいて、私は次の書き直しを構築しました

_location /store {
   rewrite ^/store /store/index.php;
}
_

これで_example.com/store/my-funny-test-product.html_は機能しますが、CSS画像などが壊れています! if (!-e $request_filename)を追加して修正しようとしましたが、nginx40xエラーが発生しました。

Css&coを壊さず、URLにindex.phpを含めずに、サブフォルダー/ storeへの_example.com/store/my-funny-test-product.html_と_example.com/store/city/my-funny-test-product.html_の実用的な書き換えを実現するにはどうすればよいですか?

これが完全なvhost設定です

_    ## The whole setup stays close with the magento recommendations
    ## http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/configuring_nginx_for_magento

server {
    listen myip:80;
    server_name .example.com;

    root /var/www/mydomain/public_html;

    location / {
        index index.html index.php;
        try_files $uri $uri/ @handler;  
    }

    ## here comes my rewrite stuff to remove index.php from the subfolder ##
   location /store {
       rewrite ^/store /store/index.php;
   }

    ## followed by some deny rulesets not relevant here ##

    location @handler { ## Magento common front handler
        rewrite / /index.php;
    }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }

    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss

        expires        off; ## Do not cache dynamic content
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
    }
_
1
Tsolen

これでexample.com/store/my-funny-test-product.htmlは機能しますが、CSS画像などが壊れています!

Tryファイルを使用する

要求が無条件に/var/www/example.com/public_html/storeにルーティングされるため、cssファイル(または/store/index.php内の実際のファイル)の要求は現在機能していません。それを機能させるために必要な最小限の変更は、使用することです try_files

## here comes my rewrite stuff to remove index.php from the subfolder ##
location /store {
    # rewrite ^/store /store/index.php; NO
    try_files $uri /store/index.php;
}

このようにして、次のファイルが存在する場合:

/var/www/example.com/public_html/store/css/style.css

次に、次のURLがそのコンテンツを返します。

http://example.com/store/css/style.css

また、ファイルに直接マップされない/storeで始まるリクエストは、/store/index.phpに渡されます。

1
AD7six