NATを使用して仮想マシンでnginxを実行しています。ホストマシンからアクセスすると、リダイレクトの問題が発生します。
http://localhost:8080/test/index.htm
_:動作します。http://localhost:8080/test/
_:動作します。http://localhost:8080/test
_:_http://localhost/test/
_にリダイレクトします。これはnot欲しいものです。私がグーグルで調べたことに基づいて、私は_server_name_in_redirect off;
_とrewrite ^([^.]*[^/])$ $1/ permanent;
を試しましたが、どちらも成功しませんでした。
_server {
listen 80;
server_name localhost;
# server_name_in_redirect off;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location ~ \.php$ {
# rewrite ^([^.]*[^/])$ $1/ permanent;
root /usr/share/nginx/html;
try_files $uri =404;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
_
serverfault ;にこの問題の可能な解決策を投稿しました。便宜上、ここに複製します。
質問を正しく理解している場合、301リダイレクトを使用せずに、 http://example.com/foo/index.html が http: //example.com/foo スラッシュなし?
もしそうなら、このtry_files設定が機能することがわかりました:
try_files $uri $uri/index.html $uri/ =404;
$uri
はURIと完全に一致します$uri/index.html
は、パスの最後の要素がディレクトリ名に一致するindex.htmlを含むディレクトリに一致します。末尾にスラッシュは付きません。$uri/
はディレクトリと一致します=404
は、前述のパターンのいずれも一致しない場合に404エラーページを返します。server
ブロックに追加する場合:
index index.html index.htm;
そして、try_files
次のようになります。
try_files $uri $uri/ =404;
それも動作するはずです。
私のために働いたやや単純な解決策は、次の例のようにabsolute_redirect off;
で絶対リダイレクトを無効にすることです:
server {
listen 80;
server_name localhost;
absolute_redirect off;
location /foo/ {
proxy_pass http://bar/;
}
http://localhost:8080/foo
でcurlを実行すると、リダイレクトHTTP応答のLocation
ヘッダーが/foo/
ではなくhttp://localhost/foo/
として指定されていることがわかります。
$ curl -I http://localhost:8080/foo
HTTP/1.1 301 Moved Permanently
Server: nginx/1.13.8
Date: Tue, 03 Apr 2018 20:13:28 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: /foo/
それから、私はどんなウェブブラウザでも相対的な位置で正しいことをすると思います。 Chromeでテストされ、正常に動作します。
試してください:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
if (-d $request_filename) {
rewrite [^/]$ $scheme://$http_Host$uri/ permanent;
}
}
}
変更してみてください
server_name localhost;
# server_name_in_redirect off;
に
server_name localhost:8080;
server_name_in_redirect on;