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

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

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

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

.htaccess

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

Q&A

解決済

2回答

2479閲覧

.htacessのRewrirteで指定のクエリがある場合にRewriteしないようにしたい

p0214

総合スコア13

Apache

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

.htaccess

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

0グッド

0クリップ

投稿2018/07/05 04:38

編集2018/07/05 05:00

.htacessのRewrirteで指定のクエリがある場合にRewriteしないようにしたいです。

■実現したい事
・URLのクエリーにて?preview=tureもしくは&preview=trueの値がある場合
/index.phpにアクセス。
・URLに?preview=tureもしくは&preview=trueが含まれない場合
→/cache/○○/index.htmlにファイルがあればアクセス
→/cache/○○/index.htmlにファイルがなければ/index.phpへアクセスする

■現状の.htacessの記述

RewriteCond %{REQUEST_METHOD} ^GET$ RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f RewriteRule ^(.*)$ /cache/$1/index.html [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]

指定のクエリーがある場合はRewriteしないようにする、と言う処理をすれば良いかと思うのですが、記述の仕方を調べても分かりませんでした。
教えていただけますでしょうか。

WordPressにて構築したサイトで使いたいと考えています。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

うーんと、あまり難しく考えないで要求どおりに書いてみましたが、こんな具合でどうでしょう。

apache

1 2#URLのクエリーにて?preview=tureもしくは&preview=trueの値がある場合/index.phpにアクセス。 3 RewriteCond %{QUERY_STRING} "preview=yes" 4 RewriteRule .* /index.html [R,L] 5 6 7#URLに?preview=tureもしくは&preview=trueが含まれない場合 8#/cache/○○/index.htmlにファイルがあればアクセス 9 10 RewriteCond %{QUERY_STRING} "." 11 RewriteCond %{QUERY_STRING} !"preview=yes" 12 RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}/index.html -f 13 RewriteRule (.*) /cache/$1/index.html [R,L] 14 15#URLに?preview=tureもしくは&preview=trueが含まれない場合 16#/cache/○○/index.htmlにファイルがなければ/index.phpへアクセスする 17 18 19 RewriteCond %{QUERY_STRING} "." 20 RewriteCond %{QUERY_STRING} !"preview=yes" 21 RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}/index.html !-f 22 RewriteRule (.*) /index.php [R,L] 23 24

投稿2018/07/05 06:50

rogueref

総合スコア727

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

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

p0214

2018/07/05 19:43

有難う御座います!! いただいたコードそのままだとリライトが動作しませんでしたので、 以下のようにすると想定した動作となりました。 RewriteEngine On RewriteCond %{QUERY_STRING} "preview=true" RewriteRule ^(.*)$ index.php [QSA,L] RewriteCond %{REQUEST_METHOD} ^GET$ RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f RewriteRule ^(.*)$ /cache/$1/index.html [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] 大変助かりました。 ありがとうございました<(_ _)>
guest

0

ベストアンサー

RewriteCondで、%{QUERY_STRING}をチェックします。

「または」の否定なのでロジックが難しいですね。
#追記

Apache

1 RewriteCond %{REQUEST_METHOD} ^GET$ 2 RewriteCond %{QUERY_STRING} !(^|&)preview=true 3 RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f 4 RewriteRule ^(.*)$ /cache/$1/index.html [L] 5 RewriteCond %{REQUEST_FILENAME} !-d 6 RewriteCond %{REQUEST_FILENAME} !-f 7 RewriteRule ^(.*)$ index.php [QSA,L]

でいいかと思います。

投稿2018/07/05 04:48

編集2018/07/05 07:42
otn

総合スコア84555

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

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

p0214

2018/07/05 05:07

「または」の否定は難しいのですね そうすると以下のような記述だと、できそうでしょうか? 認識あっていますでしょうか。 ==== RewriteCond %{QUERY_STRING} ここにクエリチェックを入れる RewriteRule ^(.*)$ index.php [L] RewriteCond %{REQUEST_METHOD} ^GET$ RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f RewriteRule ^(.*)$ /cache/$1/index.html [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
otn

2018/07/05 06:57

今気づきましたが、「実現したいこと」の○○とはなんですか? また、「現状の.htacessの記述」の、RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f の$1が意味不明です。
p0214

2018/07/05 07:21 編集

説明が不足していてすみません。 例えばhttp://~~.com/○○/index.htmlにアクセスした際に /cache/○○/index.htmlにファイルがあれば /cache/○○/index.htmlを表示 無ければ /index.phpと言う処理を想定しています。 ○○の値はWEBページの数だけ存在します。 また、$1についてはコピペしたものなので、もしかすると不要かもしれません。 こちらを参考にしました。 http://blog.direct-search.jp/2012/06/cakephp-html-cache-plugin-2x.html
otn

2018/07/05 07:29

○○については了解しました。 $1は私の間違いです。RewriteRuleの$1がそこより前のRewriteCondで参照できるとは知りませんでした。
p0214

2018/07/05 19:54

追記いただいたコードそのもので動作いたしました。 大変助かりました。ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問