質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

1回答

6296閲覧

URLの末尾や途中の階層に「 /(スラッシュ)」が2つ以上ある場合に、スラッシュが1つのURLにリダイレクトさせたい

ika-marketing01

総合スコア1

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2023/05/09 12:31

実現したいこと

「.htaccess」を用いて、URLの末尾や途中の階層(ディレクトリ)に「 /(スラッシュ)」が2つ以上ある場合に、スラッシュが1つのURLにリダイレクトさせたいです。

例)

・末尾にスラッシュが複数ある場合
https://example.co.jp//」→「https://example.co.jp/」

・途中の階層(ディレクトリ)にスラッシュが複数ある場合
https://example.co.jp//about/」→「https://example.co.jp/about/」

前提

1.作成しているWEBサイトは静的なサイトです。
2.静的サイトの中のブログ機能としてWPを組み込んでいますが、WPの方は正常にリダイレクトできています。

調べながらいろいろな記述を試していますが、知識不足で実現できません。
どうぞよろしくお願いいたします。

ディレクトリの状態

example(サイトのルートディレクトリ) ├── index.html ├── .htaccess ←このファイルで静的ページのリダイレクトを制御 ├── about .   .└── index.html ├── contact .   .└──index.html └── blog .   .└──wp-admin .   .└── wp-content .   .└── wp-includes .   .└── .htaccess ←このファイルでWPページのリダイレクトを制御(WPが自動生成)

現在の静的ページの.htaccess(ルートディレクトリ直下)

SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode SetEnvIf Request_URI ".*" AllowXmlrpc SetEnvIf Request_URI ".*" AllowCountry SetEnvIf Request_URI ".*" AllowRestApi <Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> # wwwなし に統一 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # httpsに統一 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # index.php(.html)なしに統一 RewriteCond %{THE_REQUEST} ^.*/index.(html|php) RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]

現在のWPページの.htaccess(blogディレクトリ直下)

# BEGIN WordPress # "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は # 動的に生成され、WordPress フィルターによってのみ修正が可能です。 # これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] </IfModule> # END WordPress #BEGIN COCOON HTTPS REDIRECT HTACCESS <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> #END COCOON HTTPS REDIRECT HTACCESS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

//%{REQUEST_URI}にセットされる段階で/になるようなので、//とマッチしないですね。
なので、無条件にリダイレクトします。
ただし、それだと無限にリダイレクトするので、%{THE_REQUEST}//があるかでチェックします。

Apache

1RewriteCond %{THE_REQUEST} // 2RewriteRule ^ %{REQUEST_URI} [R=301,L]

301リダイレクトだと、書き換えてテストするたびに、ブラウザキャッシュクリアしないといけないので、面倒じゃ無いですか?ブラウザ以外の方法でテストしているのでしょうか?
「これで完成したので今後書き換えることは無い」という段階になってから301に書き換えるのが良いと思います。

投稿2023/05/09 14:06

otn

総合スコア85773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ika-marketing01

2023/05/10 07:18

otn様 この記載を書き加えたところ、希望通りの挙動になりました。 理由やアドバイスも記載いただき、誠にありがとうございます。 大変助かりました。重ねて感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問