0

http://mysite.com/cssユーザーがブラウザに入力するとしましょう。cssこの場合、URI がサーバーのルートに存在するディレクトリである場合、index.html にリダイレクトしたいと考えています。実際の動作を確認するには、リクエストが処理された後、アドレス バーの URL はそのまま (例: http://mysite.com/css) のままにする必要がありますが、ディレクトリの構造を示す代わりに、index.html のコンテンツが表示されます。

これが私が試したことです。/loginand/shareは、サーバールートのディレクトリでもファイルでもないことに注意してください。/php/login.phpとの書き換えルールがあるだけ/php/share.phpです。

location / {
    try_files $uri $uri/ /index.html;
}

location = /css {
    # redirects to index.html, but removes css from URL,
    # i.e. http://mydomain.com/css -> http://mydomain.com
    rewrite ^(.+)$ /index.html/css break;
}

location = /php {
    rewrite ^(.+)$ /index.html/php break;
}

location ^~ /login/ {
    rewrite ^/login/(.+)$ /php/login.php?url=$1 last;
}

location ^~ /share/ {
    rewrite ^/share/(.+)$ /php/share.php?url=$1 last;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

私のサーバールートには2つのディレクトリがありcssます。jsこの構成では、要求はhttp://mydomain.com/cssへまたはhttp://mydomain.com/phpリダイレクトされhttp://mydomain.comます。それは問題ありませんが、URI は削除されます。どうやってやるの?

また、サーバー ルート内の任意の数のディレクトリの動作を一般化する方法にも興味があります。if要求された URI がディレクトリであるかどうかを確認するために使用する必要があるかもしれませんが、可能な限り避ける必要があることを何度も読みました。ifディレクトリが 2 つだけの場合、個別のロケーション ブロックを使用する方が効率的であると思います。

4

1 に答える 1

0

コードにエラーがありました...修正後、' http://mydomain.com/css ' は index.html からコンテンツを提供します。正規表現の&代わりに使用していました...$

于 2013-06-12T00:04:07.460 に答える