web-dev-qa-db-ja.com

Nginx。正規表現でのリダイレクトの使用

私はnginxの初心者です。 Apacheの前にnginxがあり、問題が発生しています。

設定に2つのルールが必要なようです:

ルール1)URLが「/ my_path」の場合はタッチしませんが、ユーザーは「/my_path.php」に移動します

ルール2)URLが「/my_path.php」の場合は「/ my_path」に変更し、ルール1に戻るため、ユーザーは「/my_path.php」に移動します。

これはSEOに必要だと思いますか?

たとえば、私の構成はこれです...

server {
    listen 8080;
    server_name my_Apache_server;

    location / {
        proxy_pass http://my_Apache_server/;
    }

    location ~^\/(.+)$ {
        rewrite ^\/(.+)$ /$1.php break;
        proxy_pass http://my_Apache_server/;
    }

    location ~^\/(.+)\.php$ {
        proxy_redirect http://my_Apache_server/$1 http://my_Apache_server/error.php;
    }

    ...
}

しかし、nginxはエラーを示しています:

nginx: [emerg] "proxy_pass" cannot have URI part in location given 
by regular expression, or inside named location, or inside "if" statement, 
or inside "limit_except" block

私が理解しているように、proxy_passは正規表現では使用できません。これは正しいです?設定が間違っていると思いますか?

誰か助けてもらえますか?よろしくお願いします。

私の解決策-それは機能します

    # index page
    location / {
        proxy_pass http://my_Apache_server;
    }

    # redirect(301) real "name.php" file to "name"
    location ~ ^/([A-Za-z_]+).php$ {
        rewrite  ^/([A-Za-z_]+).php$  /$1  permanent;
    }

    # not existen a-z file name to name.php
    location ~ ^/([A-Za-z_]+)$ {
        proxy_pass http://my_Apache_server/$1.php;
    }
1
see613

URIにプロキシパスすることはできません。これにより、URLの後に二重スラッシュが作成されます(http://my_Apache_server//$.php)。

試してください:

location ~^\/(.+)$ {
  rewrite ^\/(.+)$ /$1.php break;
  proxy_pass http://my_Apache_server;
}
2
Alex Turner