Googleに存在しないクエリーの付いたurlがクロールされて困っております。存在しないurlについては404を返したいと思います。
サイトは以下の2ページが存在します。
http://example.com
http://example.com/index.html(上のパターンにリダイレクトでも可)
http://example.com/hoge.html
今回404を返したいurlパターンです。
http://example.com/?
http://example.com/?foo
http://example.com/?foo=bar
http://example.com/?foo=bar&foo1=bar1&(この後もいろいろ続く)
http://example.com/?&foo
hoge.htmlの場合
http://example.com/hoge.html?
http://example.com/hoge.html?foo
http://example.com/hoge.html?foo=bar
http://example.com/hoge.html?foo=bar&foo1=bar1&(この後もいろいろ続く)
http://example.com/hoge.html?&foo
自分でも設定してみたのですが、いくつか404が出せず困っております。
上記のパターンで404が返せる具体的なhtaccessを教えていただけないでしょうか?
自分で設定したhtaccessも置いておきます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^.*=
RewriteRule ^$ /? [R=404,L]
</IfModule>
とにかく URL 中に? が含まれていたら 404 を返すには以下のようにやります。
RewriteCond %{REQUEST_URI} \? RewriteRule ^ - [R=404,L]
とにかく URL 中に? が含まれていたら 404 を返すには以下のようにやります。
RewriteCond %{REQUEST_URI} \? RewriteRule ^ - [R=404,L]
マニュアルを確認しました。
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
THE_REQUEST 変数が利用できるかもしれません。
RewriteCond %{THE_REQUEST} \? RewriteRule ^ - [R=404,L]
先のコメントのように受け付けるホワイトリストを定義する場合にはこのような形式になると思います。
RewriteCond %{THE_REQUEST} !/$ RewriteCond %{THE_REQUEST} !^/index\.html$ RewriteCond %{THE_REQUEST} !^/hoge\.html$ RewriteRule ^ - [R=404,L]
HTML ファイルを正規表現で書いても同様です。
RewriteCond %{THE_REQUEST} !/$ RewriteCond %{THE_REQUEST} !\.html$ RewriteRule ^ - [R=404,L]
THE_REQUESTというのもあったのですね。マニュアル確認大切ですね。
THE_REQUESTのパターンでほぼ期待通りの動きが実現できました。
頂いた内容を元に改めて理解できるよう勉強してみたいと思います。
設定によっては.htacessの更新が必要です。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
http://www.cquery.net/modrewrite_parmlink_404.html
マニュアルを確認しました。
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
THE_REQUEST 変数が利用できるかもしれません。
先のコメントのように受け付けるホワイトリストを定義する場合にはこのような形式になると思います。
HTML ファイルを正規表現で書いても同様です。
2015/06/11 22:36:12THE_REQUESTというのもあったのですね。マニュアル確認大切ですね。
2015/06/12 10:35:08THE_REQUESTのパターンでほぼ期待通りの動きが実現できました。
頂いた内容を元に改めて理解できるよう勉強してみたいと思います。