1

Magento の書き換えルール index.php に問題があります。

元。domain/indoor.html は 500 internal server error ですが、 domain/index.php/indoor.html は表示できます。

    My nginx.conf is 

    user  root;
    worker_processes  1;

    error_log   /var/log/nginx/error.log;

    pid        /var/run/nginx.pid;

    events {
         worker_connections  1024;
         multi_accept on;
         use epoll;
    }

http   {
index index.html index.php;
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';                   

server_tokens       off;
sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;


## Gzipping is an easy way to reduce page weight
gzip                on;
gzip_vary           on;
gzip_proxied        any;
gzip_types          text/css application/x-javascript;
gzip_buffers        16 8k;
gzip_comp_level     8;
gzip_min_length     1024;

##  SSL global settings
#ssl_session_cache shared:SSL:15m;
#ssl_session_timeout 15m;
#ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers               AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
#ssl_prefer_server_ciphers on;

keepalive_timeout   10;

## Nginx will not add the port in the url when the request is redirected.
#port_in_redirect off; 

## Multi domain configuration
#map $http_host $storecode { 
   #www.domain1.com 1store_code; ## US main
   #www.domain2.net 2store_code; ## EU store
   #www.domain3.de 3store_code; ## German store
   #www.domain4.com 4store_code; ## different products
#}

##   Add www
server {
    listen 80;
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

server {   
    listen 80;
    #listen 443 ssl;
    server_name 192.168.85.114;
    root /var/www/html;
    access_log  /var/log/nginx/access_192.168.85.114.log  main;

    if ($http_user_agent = "") { return 444;}

    ####################################################################################
    ## SSL CONFIGURATION

       #ssl_certificate     /etc/ssl/certs/www_server_com.chained.crt; 
       #ssl_certificate_key /etc/ssl/certs/server.key;

    #################################################################################### 
    ## Server maintenance block. insert dev ip 1.2.3.4 static address www.whatismyip.com

    #if ($remote_addr !~ "^(1.2.3.4|1.2.3.4)$") {
        #return 503;
        #}

    #error_page 503 @maintenance;   
    #location @maintenance {
        #rewrite ^(.*)$ /error_page/503.html break;
        #internal;
        #access_log off;
        #log_not_found off;
    #}

    ####################################################################################
    ## 403 error log/page

    #error_page 403 /403.html;
    #location = /403.html {
        #root /var/www/html/error_page;
        #internal;
        #access_log   /var/log/nginx/403.log  error403;
    #}

    ####################################################################################
    ## Main Magento location

    location / {
        try_files $uri $uri/ @handler;
    }

    ####################################################################################
    ## These locations would be hidden by .htaccess normally, protected

    location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {
        deny all;
        #internal;
    }

    ####################################################################################
    ## Protecting /admin/ and /downloader/  1.2.3.4 = static ip (www.whatismyip.com)

    #location /downloader/  {
        #allow 1.2.3.4;  allow 1.2.3.4;  deny all;
        #rewrite ^/downloader/(.*)$ /downloader/index.php$1;
    #}
    #location /admin  {
        #allow 1.2.3.4; allow 1.2.3.4; deny all;
        #rewrite / /@handler;
    #}   

    ####################################################################################
    ## Images, scripts and styles set far future Expires header

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        open_file_cache max=10000 inactive=48h;
        open_file_cache_valid 48h;
        open_file_cache_min_uses 2;
        open_file_cache_errors off;
        expires max;
        log_not_found off;
        access_log off;
    }

    ####################################################################################
    ## Main Magento location

    location @handler {
        rewrite / /index.php?$args;
    }

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

    ####################################################################################  
    ## Execute PHP scripts

    location ~ .php$ {
        add_header X-UA-Compatible 'IE=Edge,chrome=1';
        try_files $uri $uri/ =404;
        #try_files $uri $uri/ @handler;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        ## Store code with multi domain
        #fastcgi_param  MAGE_RUN_CODE $storecode;
        ## Default Store code
        fastcgi_param  MAGE_RUN_CODE default; 
        fastcgi_param  MAGE_RUN_TYPE store; ## or website;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params;

        if (!-e $request_filename) { 
            rewrite / /index.php last; 
        }
    }
}

}

しかし、これはindex.phpを書き換えることができません。私のためにそれを解決するためにあなたの助けをお願いします.

4

3 に答える 3

4

最終的な場所になるはずの内部で別の try_files を実行して、ループを作成しています。デスクトップの後ろにいるときの例で答えを修正します。

さて、nginx を Magento で動作させるための核心です。まず、否定に問題があります。

location ~ (/(app/|includes/|/pkginfo/|var/|errors/local.xml)|/\.svn/|/.ht.+) {

/pkginfo/ には先頭のスラッシュを含めるべきではなく、/ を使用するのが最も安全です。.svn と .ht に具体的に名前を付ける代わりに、Mercurial または Git に切り替えた場合、それらにもアクセスしたくありません。補足として - nginx .ht の場合は必要ありません。

/lib/ がありません。これが、通常、拒否を 2 つに分割する理由です。

location ~ ^/(app/|includes/|pkginfo/|var/|errors/local.xml|lib/|media/downloadable/) { deny all; }
location ~ /\. { deny all; }

最初のものは先頭に固定されていることに注意してください。これは /lib/ に必要です。/js/lib/ は有効なパスであり、開く必要があり、リクエスト URI の先頭に固定しないと一致し、訪問者は JavaScript ライブラリを読み込めないためです。

書き換えの処理:

まずは基地の場所。インデックスを設定し、uri を試して、ハンドラーを catch all として定義します。

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

ハンドラーで、すべてを index.php に書き換えます。

location @handler {
    rewrite /   /index.php;
}

最後に、php ファイルを処理します。try_files でキャッチされなかった場合は、既存の php ファイルの最終チェックを行い、パス情報を分割してパラメーターを渡します。マルチストアが有効な場合、変数 $store に基づいて MAGE_* 変数も設定します。これらをマップする方法は、すでに構成で開始しているため、繰り返しません。

location ~ \.php(/.*)? {
    if (!-e $request_filename) {
        rewrite / /index.php last;
    }
    expires off;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_split_path_info ^(.*\.php)(/.*)?$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param MAGE_RUN_CODE $store;
    fastcgi_param MAGE_RUN_TYPE "store";
    include fastcgi_params;
}

以上です。それが役に立てば幸い。

于 2013-08-07T07:14:39.117 に答える
-3

httpd.conf ファイルを編集する必要があります

Linux では、このコードを /etc/apache2/apache2.conf ファイルに追加してみてください

<Directory "/var/www/magento">   // Path for your site
    AllowOverride All
</Directory> 
于 2013-08-06T09:15:12.067 に答える