• ベストアンサー

.htaccessの正規表現

.htaccessの正規表現で質問があります。 <Files ~ "\.(html|gif|jpeg|png)$"> 例えばこのような場合最後のファイル名が「html」「gif」「jpeg」「png」に適用されますが、~(チルダ)はパターンマッチ、(||)(カッコとパイプライン)はパイプラインで区切ってそのいずれか、$(ドルマーク)は行末のマッチングと分かったのですが、\.(円マークとドット)が分かりません。どういう意味なんでしょうか? 例えば、次のように記述すると間違いなんでしょうか? <Files ~ "(html|gif|jpeg|png)$"> また、 <Files password.html> このような記述が載っていたのですが、ファイル名がこのような場合ダブルクォーテーション(")で囲まなくていいのでしょうか? また、*(アスタリスク)と?(クエスチョンマーク)は必ず1文字以上でなければいけないのでしょうか?0文字ではダメなんでしょうか? 回答よろしくお願いします。

  • HTML
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

> \.(円マークとドット)が分かりません。どういう意味なんでしょうか? \はエスケープ文字といいます。次に来る記号に正規表現としての特別の意味を持たせないで、その記号の表す文字そのものを意味します。 .は、直前に\が付いているので、文字ドットそのものを表します。 \.で、文字ドットそのものです。この場合は、ファイル拡張子のドットを表現しています。 正規表現をあらわすための記号そのものを、パターンの中で普通の文字として使いたいときの事を考えると良くわかると思います。 > 次のように記述すると間違いなんでしょうか? <Files ~ "(html|gif|jpeg|png)$"> 次のファイルもマッチします。(htmlが必ずしも拡張子となっていない可能性があります。) abc.xyzhtml abcxyzhtml > <Files password.html> 一つの場合は、OKです。 ------------------------------------------------------------ *(アスタリスク)は、0文字以上の任意の文字列 ?(クエスチョンマーク))は、任意の1文字 ------------------------------------------------------------ にマッチします。

miya_HN
質問者

お礼

\というのはドット(.)の文字そのものを表すためにその文字の前に配置するものなんですね。 「password.html」は一つの場合のみダブルクォーテーション(")で囲まなくてすむんですね。 *(アスタリスク)は0文字以上で、?(クエスチョンマーク)は1文字以上ですか。 分かりました。 ありがとうございました。

関連するQ&A

  • .htaccessの正規表現

    Perlの正規表現なら少しだけ知っています。 .htaccessの正規表現で、 <Files xx.gif> と <Files 'xx.gif'> は同じですか? <Files "xx.gif"> だと変数展開の動作をしようとするために上記の2つより多少重くなりますか? *.gifとerr.logを1つの<File>タグで記述する場合はどう記述すればよいですか?

  • PHP 正規表現 スラッシュの扱いについて

    PHPでファイルをアップロードするプログラムを作っています。 誤ってCGIなどのプログラムをアップしない為に、 拡張子を判断してそれを防ぐ為の構造を考えています。 そこで条件部を、 if(!preg_match("/^image\/.*(png|jpeg|gif)$/i", $_FILES["file"]["type"]) || !preg_match("/^text/html\/.*(txt|html)$/i", $_FILES["file"]["type"])){ エラーメッセージ } としたのですが、上手く動いてくれません。 恐らく「text/html」の表記に問題があるのだと思うのですが… 解決方法、教えてください。よろしくお願いします。

    • 締切済み
    • PHP
  • 正規表現によるチェック

    wikiのような掲示板のサイトを作っているのですが、 フォームへの入力値をチェックするところで、困っています。 正規表現を使えばよさそうなのですが、正規表現がよく理解できていないので、申し訳ないのですが、教えてください。 フォームへの入力が #ref(ファイル名1) #ref(ファイル名2) .... という形式に合致しているかをjavascriptでチェックし、合致しない場合はエラーを出したいと考えています。 ここで、ファイル名は 18桁の数字+拡張子 (jpg、pjpeg、gif、png、x-png) から成ります。 以上、すみませんが、ご教授の程よろしくお願いいたします。

  • htaccessでキャッシュを設定した場合

    htaccessで以下のようにキャッシュを設定した場合でも、 「aaa.jpeg?aa=20171231」などリンクに?=~をつけてリンクURLを変更すれば再読み込みが発生しますか? <Files ~ ".(gif|jpe?g|png|ico|js|gz|otf|ttf|eot|woff)$"> Header set Cache-Control "max-age=2592000" </Files>

  • 正規表現に関して

    指定のファイルがない、あるいは、指定ファイル内に「abc」という文字列が含まれていない場合には、そのファイルに「abcd」という文字列を保存したいのですが、(例えば下記のように)色々と試したのですが、上手く動作しませんでした。私の考え方か記述方法に間違いがあると思うのですが、正しい記述方法をご教授いただけないでしょうか。恐れ入りますが、よろしくお願いいたします。 ###ファイルからデータを取り出す $fileA="data.dat"; #ファイル名の指定。 open(FILEA, "$fileA"); #ファイルを開く @allbodyA = <FILEA>; #ファイル内のデータを配列に close(FILEA); #ファイルを閉じる $tmpA=@allbody; #配列のデータを変数に ###文字列検索による分岐 unless($tmpA=~ /abc/){ #「abc」が含まれているか確認してるつもりです $tmpA="abcd"; #(含まれてないときはファイルに「abcd」を保存したい。) @allbodyA=$tmpA; #print "作成成功"; ###ファイルにデータを保存 open(FILEA, ">$fileA"); #ファイルを開く print FILEA @allbodyA; #ファイルに配列「abc」を close(FILEA); #ファイルを閉じる } 申し訳ございませんが、何卒よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • sedでダブルコーテーションを違う文字に置換

    お世話になります。 csvファイル内にある"""(ダブルコーテーション3つ連続)を"~(ダブルコーテーション+チルダ)に置換 したいのですが、どのように記述すればいいのでしょうか? Windows7上でGNU32のsed.exeを使用しています。

  • .htaccessを置くと500エラーが出ます

    初めまして。 現在閲覧制限のあるサイトをribbon.toで作ろうとしている者なのですが、 .htaccess と.htpasswdの設定についてお伺いしたいところがあります。 現在.htaccess editorというオンライン上のソフトを使いファイルを 作成したのですが、ふたつのファイルをサーバー上のディレクトリに置くと、 500 internal server errorを返されてしまいます。 それぞれのファイルには以下のように記述しています。 (1).htaccess <Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Options -Indexes AuthUserFile AuthUserFile /home/freeuser/ユーザー名/123xxx(フォルダ名)/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user order deny,allow (2).htpasswd 設定する予定のユーザー名(半角英字4文字):暗号化されたパスワード(半角英数13文字) ユーザー名までのパス名は、ribbonの質問箱にあった 記述例を参考にしています。 123xxx以下のファイルの閲覧制限をかけたいと思い、 これら2つのファイルをHPビルダーのファイル転送機能を用いて 123xxxフォルダにテキスト転送モードでアップロードしているのですが、 アップロード自体はうまく行くものの、 いざ/123xxx/にアクセスしようとすると500エラーが返ってきます。 ちなみに、なぜか最初だけ一瞬うまく見られかけたのですが、 記述に誤りがあったため修正した途端にエラーが出るようになりました。。。 また使用しているwindowsのパソコンでは、<Files ~ "^(スラッシュの反対の記号).(htaccess|htpasswd)$"> 「スラッシュの反対の記号」の字が認識できず (こちらでも文字化けするようですね)、自動的に¥に 変換されてしまいます。 それも原因なのかな?と思いますが、ribbonさんの.htaccessの 記述例に書いてある通りの記述法に変更してみても (そちらは文字化けしません)同じ現象が起こります。 コマンドの下に改行を入れてみたり、いったん.txtとして アップロードしてから.htaccessファイルに変換してみたりと、 思いつく限りのことはやって見ているのですが、 結果はいつも同じ500エラーで、お手上げの状態です。。 もしも何がおかしいのかお分かりになる方、 或いはこう書き直してみたら?というのが お分かりになる方がいたら、教えて頂けると幸いです。

  • htaccessのRewriteRuleの正規表現

    htaccessファイルのRewriteRuleの記載方法で悩んでいます。 実現したい事は以下の2つの動作ですが、(1)は出来たのですが、(2)で困っています。 なお、{user_name}は"?"を除く半角英数文字と-_で構成されています。 (1)Twitterのようにドメイン名以後にユーザ名がある場合はindex.phpにGETのuserでuser_nameを渡す http://hogehoge.com/{user_name}  ↓ http://hogehoge.com/index.php?user={user_name} (2)ユーザ名表示の際にオプションがある場合("?"以後)は、そのまま変換先URLの最後尾に記述する http://hogehoge.com/{user_name}?option1=ok  ↓ http://hogehoge.com/index.php?user={user_name}&optione1=ok 現状以下のようにhtaccessを考えましたが結果NGでした。 RewriteEngine on RewriteRule (.+)[?](.+)$ index.php?mode=user&screen_name=$1&$2 [L] RewriteRule (.+)$ index.php?mode=user&screen_name=$1 [L] よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 正規表現について(Perl5準拠)

    HSPでプログラミングをしてるのですが、標準のHSPでは正規表現が使えないため、Perl5に準拠した正規表現が扱えるモジュールをインクルードして使っています。 正規表現初心者です。 プログラムのなかでファイのパスからファイル名だけにマッチするような正規表現を使いたいのですが上手くいきません。 具体的には c:円dir1円dir2円filename.xxxからfilename.xxxを抜き出すために ※円マークが質問に表示されないぬで「円」と書きました。 [^円]+$ という正規表現を考えました。意味は「円」以外の文字で始まる行末までの文字列という感じです。 「円」がメタ文字の為の記号だからダメなんでしょうか?自体を認識するためにはどのようにしたらいいのでしょうか? それとも正規表現がダメなんでしょうか? Perl5の場合でいいので、分かる方、教えてください。

  • htaccessのエラーについて

    htaccessのエラーについての質問です。 リダイレクトを以下のように設定して正常に動作しています。 RewriteEngine On RewriteBase / RewriteRule ^◯◯◯◯◯◯◯$ /◯◯◯◯◯◯◯ [R=301,L] これにキャッシュコント―ロールのため、 以下のコードを追加したところ <Files ~ "\.(pdf|png|jpg|gif)$"> Header set Cache-Control no-cache Header set Pragma no-cache </Files> Internal Server Error になってしまいました。 文字コードや不要な空白などのミスは無いように思うのですが、 htaccessの内容によってエラーの発生は起こるのでしょうか?

専門家に質問してみよう