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

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

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

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

Q&A

解決済

2回答

5761閲覧

特定のURLを404にしたい

coinbura

総合スコア106

.htaccess

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

0グッド

0クリップ

投稿2018/01/10 03:32

編集2018/01/10 05:15

htaccessを使って、特定URLを404エラーにしたいです。

例えば、
http://example.com/aiueo.html

http://www.example.com/aiueo.html
を404にする場合、どのようにすれば良いでしょうか?

ただしこの時、
https://example.com/aiueo.html
は通常通り表示させたいです。

ちなみに、今現在、以下のようにしていますが、うまくいっていません。

RewriteEngine on
RedirectMatch 404 http://example.com/aiueo.html$1
RedirectMatch 404 http://www.example.com/aiueo.html$1
RewriteCond %{HTTPS} off
RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^(.
)$ https://example.com/$1 [R=301,L]

サーバーはエックスサーバーです。

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

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

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

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

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

CHERRY

2018/01/10 03:45 編集

Rewrite_Log を設定できるのであれば、ログを取れば、なぜうまくいかないのかが判断できると思います。ログが取れるようサーバであれば、Rewrite_Logを質問に追記してください。
coinbura

2018/01/10 04:58

すみません。Rewrite_Logの意味がよく分かっておらず、取得できませんでした。
guest

回答2

0

自己解決

以下のように、リダイレクトの例外を使用する事でうまくいきました。

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^aiueo.html$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

投稿2018/01/10 08:50

coinbura

総合スコア106

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

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

0

RewriteRule で、404 を返したいのであれば、フラグとして R=404 をつけます。

ヒントとしては...
http の場合だけ 404 にするには、下記の2行で、404 エラーを返せます。

RewriteCond %{HTTPS} off RewriteRule ^aiueo.html$ - [R=404,L]

詳しくは、マニュアル RewriteRule Flags を参照。


(検証を追加)
http ステータスを確認するために wget コマンドで接続してテスト。
.htaccess で設定後に URL ( http://example.com/aiueo.html )を開くと 以下のように 404 レスポンスになってます。 https ( https://example.com/aiueo.html )でアクセスすると 200レスポンスで、ファイルを取得できています。

http の場合、404 ( = エラー )

$ wget http://example.com/aiueo.html --2018-01-10 13:07:57-- http://example.com/aiueo.html Resolving example.com... 192.168.1.112, 192.168.1.10 Connecting to example.com|192.168.1.10|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2018-01-10 13:07:57 ERROR 404: Not Found.

https の場合は、200 (= OK)

$ wget https://example.com/aiueo.html --2018-01-10 13:57:38-- http://example.com/aiueo.html Resolving example.com... 192.168.1.112, 192.168.1.10 Connecting to example.com|192.168.1.10|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 50 [text/html] Saving to: 'aiueo.html'

投稿2018/01/10 03:50

編集2018/01/10 05:04
CHERRY

総合スコア25171

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

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

coinbura

2018/01/10 04:47

なるほど。 よく理解はできていませんが、.htaccessでは不可能な事案ということなんですね(^^; ご丁寧にありがとうございましたm(_ _)m
CHERRY

2018/01/10 04:56 編集

いえ、最初に回答に書いた書き方が間違っていたため、.htaccess でうまく動かなかっただけです。解答欄は、修正済みです。 解答欄に書いた .htaccess の内容は、aiueo.html にアクセスがあった場合に https がオフの場合に 404 になる最低限の RewriteRule です。
coinbura

2018/01/10 05:01 編集

すみません。勘違いしていました(^^; 一応頂いたヒントを頼りに以下のようにしたところ、やはりうまくいきませんでした。 (すべて「https://example.com/aiueo.html」にリダイレクトしてしまう) RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^aiueo.html$ - [R=404,L] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTP_HOST} ^www.example.com RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] どこか間違っていますでしょうか? ご教授いただければ幸いです。
CHERRY

2018/01/10 05:13

お使いのサーバは、レンタルサーバーですか? レンタルサーバーの場合、使えない書き方があったりしますので、どこのサーバーを使っているか質問に記載してください。
coinbura

2018/01/10 05:17

情報不足申し訳ございません。 記載させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問