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

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

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

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

2018閲覧

htaccessファイルについて

erika.m

総合スコア46

Apache

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2017/02/24 10:15

WordPressを利用しようと触っているうちに、Apacheのhtaccessファイルについて疑問を持ちました。
htaccessに関係する、調べてもよく分からなかった点、まとめて質問させてください。

ネットでよく見かける、「index.html有りを、無しに統一する」サンプルコードです。

htaccess

1<IfModule mod_rewrite.c> 2RewriteEngine on 3RewriteCond %{THE_REQUEST} ^.*/index.html 4RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L] 5</IfModule>

まず1つ目
RewriteCondの行の後半部分の.(ドット)がエスケープされていません。
それともこの書き方が正しくて私が間違っているのか、ネットを検索してもエスケープ無しのサイトが多すぎて分かりません。
確かに意図した動きはしてくれていますが…

2つ目
RewriteRuleの変換先の$1は、変換元の(.*)の部分を見に行くと思っているのですが違うのでしょうか?
http://www.example.com/index.htmlにアクセスした場合、
http://www.example.com/http://www.example.com/となってしまうような気がします。

最後に
RewriteBaseを使ってシンプルに書きたいのですが、以下のコードの■■に入る良い書き方はありますか?

htaccess

1<IfModule mod_rewrite.c> 2RewriteEngine on 3RewriteBase /test_dir/test_subdir/ 4RewriteCond %{THE_REQUEST} ^.*/index.html 5RewriteRule ^(.*)index.html$ ■■$1 [R=301,L] 6</IfModule>

/test_dir/test_subdir/index.htmlの、index.htmlをただ消したいだけなのです。

宜しくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

期待している回答になっているか不明ですが。。。

まず1つ目

正規表現で、厳密に判定するのであればエスケープするのが正解だと思います。
(ファイル名の指定なので、表記方法が曖昧になっているのかもしれません)

RewriteCond %{THE_REQUEST} ^.*/index\.html RewriteRule ^(.*)index\.html$ http://www.example.com/$1 [R=301,L]

2つ目

(ざっくり書いてしまうと)
「RewriteRule」でチェックする対象は、URL の http://www.example.com の後ろになります。

http://www.example.com/index.html の場合、 RewriteRule の検索対象は
/index.html が対象になります。


最後の質問に関しては、普段、気にしていないので明確なアドバイスができません。

RewriteRule ^(.*)index\.html$ http://%{HTTP_HOST}/$1 [R=301,L]

投稿2017/02/26 08:56

gorogoroIT

総合スコア447

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

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

0

2つ目
RewriteRuleの変換先の$1は、変換元の(.*)の部分を見に行くと思っているのですが違うのでしょうか?
http://www.example.com/index.htmlにアクセスした場合、
http://www.example.com/http://www.example.com/となってしまうような気がします。

これに関しては
^(.*)index.html$の判定には、(おそらく)サーバルートからのパスが渡されると理解し、自己解決しました。

深い階層のディレクトリ内のindex.htmlにアクセスした時にパスが崩れないように
http://www.example.com/aaa_dir/index.htmlにアクセスすると、(.*)に該当するのは/aaa_dir/

よって
http://www.example.com/$1は
http://www.example.com/aaa_dir/になる。

投稿2017/03/22 09:03

erika.m

総合スコア46

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

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

0

エスケープはいりません。正しいです。
.* は任意の文字列にマッチします。

追記

見落としていました。index.html のことならエスケープがあった方が正しいですが、まず index.html 以外に候補に上がることがないので見落とされているのでしょう。

投稿2017/02/24 11:34

編集2017/02/24 11:37
Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問