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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

476閲覧

.htaccessで転送がかかりません。

avantgarden

総合スコア121

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

1クリップ

投稿2018/12/25 09:48

index.htmlとtop.htmlにアクセスしたときに「/」に転送をかけるために
.htaccessに下記のように記述したのですが、なぜか転送されません。

記述がおかしいのでしょうか?

.htaccess自体は有効です。

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} ^index.html [OR] RewriteCond %{REQUEST_URI} ^top.html RewriteRule ^(.*)$ https://{ドメイン}/$1 [R=301,L] </IfModule>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/25 10:46

根本的な問題として mod_rewrite は有効ですか?
avantgarden

2018/12/25 11:00

ラクサバというレンタルサーバなのですが、 該当のディレクトリの.htaccess設定に、もともと <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^(.*)$ https://{ドメイン}/$1 [R=301,L] RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.{ドメイン})(:80)? RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^(.*) https://{ドメイン}/$1 [R=301,L] </IfModule> という記述があったので、有効になっているはずです。
avantgarden

2018/12/25 11:01

質問欄の記述自体には問題ないのでしょうか?
退会済みユーザー

退会済みユーザー

2018/12/25 11:07

ぱっとみ index.html にアクセスすると無限ループに陥る感じなんだけどな
退会済みユーザー

退会済みユーザー

2018/12/25 11:27

凝ったアクセスをしなければ、全部httpsにリダイレクトされてて、下に追加してもそこまで到達しないんじゃないかっていう。
退会済みユーザー

退会済みユーザー

2018/12/25 11:37

レッツエンクリプトつかってるから常時HTTPS化してるだけじゃね
退会済みユーザー

退会済みユーザー

2018/12/25 11:38

あとサブディレクトリの index.html には効果ないしなこれ
guest

回答2

0

ベストアンサー

普通は、

Apache

1RewriteEngine on 2RewriteRule ^(index.html|top.html)$ https://{ドメイン}/$1 [R=301,L]

あるいは、元の形を活かすなら、

Apache

1RewriteEngine on 2RewriteCond %{REQUEST_URI} ^/index.html$ [OR] 3RewriteCond %{REQUEST_URI} ^/top.html$ 4RewriteRule ^(.*)$ https://{ドメイン}/$1 [R=301,L]

先頭の、/の有無に注意して下さい。

投稿2018/12/25 11:53

otn

総合スコア84559

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

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

avantgarden

2018/12/26 02:08

ありがとうございます。 結果的に、ちゃんとリダイレクトされました。 時間差があったのか…最初は効かなくてその原因は不明ですが。。 お騒がせしました。
avantgarden

2018/12/27 09:07

すいません。追加でお聞きしたいのですが、 >先頭の、/の有無に注意して下さい。 先頭の「/」が必要なのはなぜでしょうか。 というか、%{REQUEST_URI}の意味を教えてほしいです。 あと、そういうのがまとまっているサイトとかないでしょうか? Apache関係で探したらいいのでしょうか。
guest

0

ググった。

index.html「あり・なし」のURL正規化 - 301リダイレクト応用編 | 海外SEO情報ブログ

[mod_rewrite] index.htmlを省略したURLにリダイレクトする.htaccess - JoyPlotドキュメント

RewriteEngine on RewriteCond %{REQUEST_FILENAME} index.html RewriteRule ^index.html$ / [R=301,L] RewriteRule ^(.*)/index.html$ /$1/ [R=301,L] RewriteCond %{REQUEST_FILENAME} top.html RewriteRule ^top.html$ / [R=301,L] RewriteRule ^(.*)/top.html$ /$1/ [R=301,L]

なら、どうかな?

「%{REQUEST_URI}」を使うと、URL(URI)を評価する対象にしてしまうので、
URLってhttpうんたらっていう文字列だから、そりゃヒットしないでしょと。
mod_rewrite - Apache HTTP Server Version 2.4
リファレンスみたら、違ってた。asahina1979さんご指摘ありがとう。

投稿2018/12/25 10:19

編集2018/12/25 11:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

avantgarden

2018/12/25 10:29

Options +FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L] でやってみましたが、効きませんでした。。
avantgarden

2018/12/25 10:40

追加いただいた方法でもダメでした。 こちらでも色々調べているのですが、うまくいかないです…
退会済みユーザー

退会済みユーザー

2018/12/25 11:04

なぜにドメインの書き換えまでやろうとしている? よそに飛ばそうとしている? それと、もしかして質問文中に示していない .htaccess の定義があるなら、 そっちの影響もあるかもしれないので示してくれるとありがたい。
avantgarden

2018/12/25 11:12

元々の記述です。 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/[0-9]+..+.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/.well-known/pki-validation/[A-F0-9]{32}.txt(?:\ Comodo\ DCV)?$ RewriteRule ^(.*)$ https://{ドメイン}/$1 [R=301,L] RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.{ドメイン})(:80)? RewriteCond %{REQUEST_URI} !^/[0-9]+..+.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/.well-known/pki-validation/[A-F0-9]{32}.txt(?:\ Comodo\ DCV)?$ RewriteRule ^(.*) https://{ドメイン}/$1 [R=301,L] </IfModule> ここの</IfModule>の直前に追記しようとしています。
退会済みユーザー

退会済みユーザー

2018/12/25 11:20

すまんなぁ、机上のみで。
退会済みユーザー

退会済みユーザー

2018/12/25 11:23 編集

既存の記述はサーバーコントロールパネルへのアクセスやファイル認証SSLの関係のものっぽい。 サーバーコントロールパネルへのアクセスやファイル認証SSLの関係のものに関係しないアクセスを全部httpsにリダイレクトしちゃっていて、その下に書き加えても、そこまでこないんじゃないかと。
退会済みユーザー

退会済みユーザー

2018/12/25 11:26

ひとつめのCond~Ruleの組とふたつめのCond~Ruleの組で、 大概のアクセスが引っかかってしまうので、 そこに穴を開けないと独自ルールまでたどり着かないと思われる。 しかし、机上だとだんだんわからなくなってくるなぁ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問