私は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;
}
URIにプロキシパスすることはできません。これにより、URLの後に二重スラッシュが作成されます(http://my_Apache_server//$.php
)。
試してください:
location ~^\/(.+)$ {
rewrite ^\/(.+)$ /$1.php break;
proxy_pass http://my_Apache_server;
}