質問編集履歴

2 タイトル変更

shogo_misaki

shogo_misaki score 13

2018/11/21 17:12  投稿

nginxにてxxx/index.htmlをxxx/に、yyy/index.phpをyyy/をリダイレクトして動作させたい。
nginxにてxxx/index.phpにアクセスされた際xxx/へリダイレクトしたい
### 前提・実現したいこと
現在各ディレクトリ階層でindex.htmlやindex.phpを設置しています。
SEO施策として
xxx/index.html
xxx/
それぞれのURLでアクセスできると評価分散になるとのことで、
xxx/index.html
にアクセスした際
xxx/
にリダイレクトするようにしたいです。
### 発生している問題・エラーメッセージ
先人にて同様の処理を行なった方がいたので参考に作成しましたが、
htmlファイルに関しては問題ないのですが、phpファイルまでhtmlへリダイレクトしてしまっており
404エラーが発生していまいます。
### 該当のソースコード
```nginx.conf
server {
listen 80;
server_name hogehoge.com;
root /var/www/html;
if ($http_x_forwarded_proto != https) {
return 301 https://hogehoge.net$request_uri;
}
charset UTF-8;
# rewrite ^/index.html$ / permanent;
location ~ (.*)/index.html {
return 301 $1/;
}
# Wordpress
location / {
index index.php index.html index.htm;
try_files $uri $uri/ index.php index.html;
rewrite ^(.*)/index.html$ $1/ permanent;
ssi on;
ssi_last_modified on;
}
location @wp {
rewrite ^/wp(.*) /wp/index.php?q=$1;
}
location ^~ /wp {
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location = /wp/ {
return 302 /;
}
location ~* /wp/wp-config.php {
return 404;
}
location ~ /wp/\. {
return 404;
}
location ~ /wp/wp-login\.php$|/wp/xmlrpc\.php$|/wp/wp-admin/((?!admin-ajax\.php).)*$ {
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
```
### 試したこと
1)location ~ (.*)/index.html {の箇所を追加
単純にこれだけ追加しただけではリダイレクトループが発生してしまいました。
2)rewrite ^(.*)/index.html$ $1/ permanent;を追加
これでindex.html自体のリダイレクトは正しくできましたが、
yyy/index.phpに関してはyyy/にリダイレクトしたもののnot foundになる。
※おそらくyyy/index.htmlへリダイレクトしているため?
index.html、index.php共にリダイレクトして正しく動作させるためにはどのようにすればよいのでしょうか。
  • nginx

    1616 questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

1 タグ変更

shogo_misaki

shogo_misaki score 13

2018/11/21 17:10  投稿

nginxにてxxx/index.htmlをxxx/に、yyy/index.phpをyyy/をリダイレクトして動作させたい。
### 前提・実現したいこと
現在各ディレクトリ階層でindex.htmlやindex.phpを設置しています。
SEO施策として
xxx/index.html
xxx/
それぞれのURLでアクセスできると評価分散になるとのことで、
xxx/index.html
にアクセスした際
xxx/
にリダイレクトするようにしたいです。
### 発生している問題・エラーメッセージ
先人にて同様の処理を行なった方がいたので参考に作成しましたが、
htmlファイルに関しては問題ないのですが、phpファイルまでhtmlへリダイレクトしてしまっており
404エラーが発生していまいます。
### 該当のソースコード
```nginx.conf
server {
listen 80;
server_name hogehoge.com;
root /var/www/html;
if ($http_x_forwarded_proto != https) {
return 301 https://hogehoge.net$request_uri;
}
charset UTF-8;
# rewrite ^/index.html$ / permanent;
location ~ (.*)/index.html {
return 301 $1/;
}
# Wordpress
location / {
index index.php index.html index.htm;
try_files $uri $uri/ index.php index.html;
rewrite ^(.*)/index.html$ $1/ permanent;
ssi on;
ssi_last_modified on;
}
location @wp {
rewrite ^/wp(.*) /wp/index.php?q=$1;
}
location ^~ /wp {
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location = /wp/ {
return 302 /;
}
location ~* /wp/wp-config.php {
return 404;
}
location ~ /wp/\. {
return 404;
}
location ~ /wp/wp-login\.php$|/wp/xmlrpc\.php$|/wp/wp-admin/((?!admin-ajax\.php).)*$ {
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
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;
}
}
```
### 試したこと
1)location ~ (.*)/index.html {の箇所を追加
単純にこれだけ追加しただけではリダイレクトループが発生してしまいました。
2)rewrite ^(.*)/index.html$ $1/ permanent;を追加
これでindex.html自体のリダイレクトは正しくできましたが、
yyy/index.phpに関してはyyy/にリダイレクトしたもののnot foundになる。
※おそらくyyy/index.htmlへリダイレクトしているため?
index.html、index.php共にリダイレクトして正しく動作させるためにはどのようにすればよいのでしょうか。
  • nginx

    1616 questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • HTML

    20904 questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • PHP

    34605 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る