ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:リライト設定の正規表現) リライト設定の正規表現について 2007/10/04 11:25 このQ&Aのポイント リライト設定の正規表現について質問があります。リクエストURLの一部を特定のURLにリライトさせたい方法を探しています。正規表現の修正や別の設定方法についてアドバイスをお願いします。 リライト設定の正規表現 ここのカテゴリでいいのか自身がありませんが質問させて下さい。 例えば以下のようなリライト設定を行いたいとします。 http://xxxxx.xx/aaa/123.html http://xxxxx.xx/a1b/123.html http://xxxxx.xx/45/123.html ・ ・ http://xxxxx.xx/3/123.html http://xxxxx.xx/efafda/123.html ↓リライト↓ http://xxxxx.xx/zzz/123.html リクエストURLの一部を、zzzというURLにリライトさせます。 "123"の部分は可変で、リライト先のURLに引き継ぎたいです。 スマートに設定したいと思っているのですが、以下のような設定をするとリライトの無限ループにはまってしまいます。 RewriteRule ^/(.+)/(.+)\.html$ /zzz/$2.html [R=301,L] 上記を修正して、zzzでリクエストが来たとき意外はzzzにリライトさせる、 という方法を取りたいと思っているのですが、うまい正規表現の方法がわかりません。 (うまく"!"を組み込む感じで・・・) あるいは他にもいい設定方法があれば知りたいです。 どなたかご存知の方、教えていただけないでしょうか? 宜しくお願い致します。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー Tacosan ベストアンサー率23% (3656/15482) 2007/10/04 13:15 回答No.1 「rewrite の無限ループを避ける」ってので, 1つは見付かった. これでうまくいくかどうかは知りませんが.... 参考URL: http://www.ksknet.net/apache/rewritecond_rew.html 質問者 お礼 2007/10/04 13:56 調べていただいてありがとうございます。 参考になりました。 こんな感じでしょうかね? RewriteCond %{REQUEST_URI} !^/zzz/(.+)\.html RewriteRule ^/(.+)/(.+)\.html$ /zzz/$2.html [R=301,L] 試してみたいと思います。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターOS(技術者向け)Linux系OS 関連するQ&A プログラムのクエリーをRewriteRuleの正規表現で書き換え ページを検索エンジンに登録させるために URLのクエリー以下(?からうしろ)を.htaccessのRewriteで書き換えて「/」区切りでアクセスさせようと思っています。 http://***.domain.com/program.html?a=1&b=2&c=3 ↓ http://***.domain.com/program/a/1/b/2/c/3.html 大抵このような場合 RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7&$8=$9&$10=$11 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7&$8=$9 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5 [L] RewriteRule ^(.*)/(.*)/(.*)\.html$ $1.html?$2=$3 [L] のように追加していく書き方が簡単だと思うのですが、クエリーの数が多く正規表現の「()」で参照する変数が$10を超えてしまい上手く参照できません。 クエリーがいくら追加されても対応できる汎用性のある記述を作ろうと思っています。 何か良い方法があったら教えて下さい。 リライト設定につきまして、ご教授お願いします。 ◼︎環境 CentOS 6.6 apache 2.4.12 tomcat 8.0.21 java 1.8.0_31 ◼︎問題 tomcatのwebdavを利用しwebdavを構築し、URLをリライトしたい. https://【ドメイン】/webdav/webdav/ →https://【ドメイン】/webdav/ でアクセスしたい。 ★httpd.conf設定内容 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*)?$ https://%{HTTP_HOST}/$1 [R=301,L] RewriteRule ^/(.*)?$/webdav/(.*)$ /webdav/$1 </IfModule> RewriteRule ^/(.*)?$/webdav/(.*)$ /webdav/$1 の 記述につきまして、ご教授いただけると幸いです。 よろしくお願いします。 ◼︎参考サイト http://d.hatena.ne.jp/iad_otomamay/20080614/p1 を参考にwebdavを構築。 web.xmlの<url-pattern>/*</url-pattern>を<url-pattern>/webdav/*</url-pattern>に 変更しています。変更している理由は、/*の場合に他のwebapps配下のディレクトも対象になってしまうため、webdavのディレクトリを作りurl-patternに追加した経緯がございます。 httpd.confのURLリライトについて httpd.confのURLリライトについてご質問です。 環境 CentOS5.2 Apache 2.2.3 tomcat 5.5.25 Apacheとtomcatの連携でWebサーバを作成しております。 httpd.confでURLリライト設定をしておりますが、リライトが行われません。 以下httpd.confの設定内容です。※AAをBBにリライト AcceptPathInfo On RewriteEngine On RewriteRule BB AA [R] また.htaccessも試したのですが同じ結果です。 (httpd.confはAllowOverride Allとしてあります。) 設定後のApache、tomcatの再起動も行っております。 どなたか、原因に心当たりのある方、いらっしゃいますでしょうか? ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム htaccessのリライトとエラーページ .htaccessのリライトとエラーページについて .htaccessでリライトの設定をしているのですが、うまくいかない部分があります。 まずwww無しでのアクセスは全てwwwありへ変更しています。 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^○○○.biz [NC] RewriteRule ^(.*)$ http://www.○○○.biz/$1 [L,R=301] 上記は正常に動作しています。 次は設置しているcgiのURLの設定をしています。 RewriteRule search/(.*) cgi/search/$1 [L] ##正常に動作 RewriteRule ^search/([0-9]+)$ cgi/search/navi.cgi?mode=kt&kt=$1 RewriteRule ^search/([0-9]+)/$ cgi/search/navi.cgi?mode=kt&kt=$1 残りの2つがうまく動作していません。 本来のURLが下記なので http://www.○○○.biz/cgi/search/navi.cgi?mode=kt&kt=01 ↓こちらでアクセスしてみると http://www.○○○.biz/search/01 404 ページが見つかりません http://www.○○○.biz/search/01/ 500 サーバーエラーが表示されてしまいます。 正常に動作している方でURLを短縮しているのでcgiの階層指定をやめてみましたがダメでした。 RewriteRule ^search/([0-9]+)/$ search/navi.cgi?mode=kt&kt=$1 またエラーページを指定しているのですが、403と404は動作していますが500が通常のページが表示されてしまいます。(401は未確認) ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html ErrorDocument 500 /error/500.html 色々と調べましたが何がいけないのか分からず手詰まり状態です。 お手数ですがご回答頂けると幸いです。 リダイレクトで「自動転送設定がループしています」 サイトリニューアルに伴いディレクトリ構造が変わるので、.htaccessで以下のように書いてリダイレクトしようと思いましたが、「このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」と出てリダイレクトが出来ません。 Redirect permanent /aaa/bbb/ccc/xxx.html http://hoge.com/aaa/123 試しにリダイレクト先を全く別のURLにしてみたら正常にリダイレクトされるので、上記の記述自体は問題ないと思うのですが、新しいサイトにはdrupalを使っていて、.htaccessには以下の内容が予め記述してあります。何かバッティングしているのでしょうか? <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </IfModule> PHPは5.2.5です。 複数の静的URLからアクセスできる重複コンテンツのまとめ方 ドメインをexample.comとします。 現在、トップページが以下のようになっており example.com/ example.com/ja/ example.com/top/ example.com/ja/top/ これらがすべてmod_rewriteで同じページにアクセスできるようにしています。 example.com/en/ は英語ページになっています。デフォルトが日本語(ja)なので、jaなら普通のトップにリライトされるわけです。 リライトルールは以下のような感じです。 RewriteRule ^(.*)$ /ja/$1 [L] RewriteRule ^(ja|en)/$ /$1/top/ [L] 現在、このトップページが明らかに検索エンジンに弾かれています。 Yahoo、MSNの2つが特にひどいです。 ※ example.com/aaa などサブページは正当に掲載される もしかしたら重複URLのペナルティなのかな?と思っています。 そこで、301を使いうまくURLをまとめたいのですが、やはり見栄え的には example.com/ が検索結果の対象になって欲しいところです。 しかし、 RewriteRule ^ja/(.*)$ /$1 [301,L] は無限ループになってしまいます。 この場合は example.com/ja/top を検索結果の対象にしなければならないのでしょうか? また、そもそもこの程度でペナルティを受けるのでしょうか?別の対処方法は無いのでしょうか? よろしくお願いします。 【Apache】リダイレクト、リライトの遷移先指定制限 Apacheのリダイレクト、リライト設定について質問です。 リダイレクト(RedirectMatch)設定の場合、リダイレクト先のURLをフルパス 表記にしないと、ドコモの古い端末等で対応できないとの情報がありましたが、 リライト(RewriteRule)でも同様の制限があるのでしょうか? 宜しくお願い致します。 正規表現が組み立てれません・・・ URLのRewriteをしようと思うのですが、いまいち正規表現がわかりません。 調べながら作っているのですが、前方一致の否定のところでつまずきました。 条件は以下の通りです。 ○ 拡張子は.htmlもしくはaspxのみ ○ 前方にsub/ではないこと 条件は少なく割りと簡単に作れると思っていたのですが・・・ 私が作ったのはこんな感じです。 (?!(sub\/))(.*)(\.html|\.aspx|/$) しかし、これだと sub/aaa/bbb.html でチェックしたところ ub/aaa/bbb.html としてヒットしてしまいます。 最終的な目的は aaa/bbb.html はヒットする sub/bbb.html は先頭がsub/から始まってるのでヒットさせない と言った感じにしたいです。 前方一致の否定とは一体どのようにするのでしょうか *** 環境 *** Windows Server R2 2008 IIS 7.5 Rewrite Module サーバーの設定ですが正規表現はプログラミングで使う機会が多いのでこちらの方のカテゴリーにさせて頂きます。 正規表現 strutsのバリデータでmaskのみで 以下の条件を正規表現を使ってあらわしたいのですが 使用可能文字 半角英数字 @ - _ . 条件 @ _ - . 同一文字の連続使用は不可。 先頭と最期は半角英数字のみ。 全部の文字数は3文字以上30文字以内。 aaa@aaa OK aaa@_-a OK aaa@@_a NG a@@@a NG @マークの連続使用不可は↓でできたのですが、 ^[a-zA-Z0-9]([a-zA-Z0-9]+@?){1,30}[a-zA-Z0-9]$ _ . - の条件を加えるとうまくいきいません。。 よい方法がございましたらご教授ください!! 【Apache】アドレスバーにリライト前のURLを表示 Apacheリライトに関する質問です。 http://ts1.example.com/xxxxx/test.cgi?hogehoge ↓ http://ts2.example.com/test.cgi?hogehoge というリライト設定を行いたいと思い、 RewriteRule ^/[^/]+/test.cgi http://ts2.example.com/test.cgi [L] という設定を入れました。 動作は問題ないのですが、ブラウザのアドレスバーのURLを http://ts1.example.com/xxxxx/test.cgi?hogehoge のままにしておき、内部的にリライトさせたいです。 (表面上は遷移していないように見せたい) 実現する方法はあるでしょうか? 宜しくお願い致します。 SuiteXでの.haccessの設置の仕方 suiteXでマルチドメインで運用をしたいのですが、www.aaa.jpとaaa.jpのドメインがあり、aaa.jpへアクセスされるとwww.aaa.jpへアクセルするようにしたいと思っています。 suiteX内のマルチドメイン設定ツールで下記のように設定しました。 # This file is made by RewriteRule Tool. # Enable RewriteEngine. RewriteEngine On # 404 Error for Multidomain Directories. RewriteCond %{HTTP_HOST} ^centia.jp$ RewriteCond %{REQUEST_URI} ^/(www.aaa.jp|aaa.jp)/ RewriteRule ^(.*)$ /$1 [L,R=404] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.aaa.jp|aaa.jp) RewriteCond %{REQUEST_URI} !^/(www.aaa.jp|aaa.jp)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] .htaccessについては全く分からない者ですいません。 aaa.jpにアクセスするとwww.aaa.jpへアクセスするにはどのように記述したらよいですか? htaccessでurlの正規化しかし・・・ htaccessでindex html有りなしの正規化をしました。 ▼ソース # URLの正規化(index.html無し) Options FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://scinex-fw.co.jp/$1 [R=301,L] これで一安心と思いきや、問題が発生しました。 フォームにフリーのCGIを使用してるのですが、 確認ボタンを押すと「403 Forbidden」が返されてしまいます! CGIはまったくわかりませんが、 通常は確認ボタンをクリックすると「mail.cgi」か「config.cgi」 おそらく「mail.cgi」が「kakunin.html」を表示させる手はずだと思います。 htaccessの設定前まではうまくいっていたのですが、 現在はhtaccessを消さないと「403 Forbidden」が呼び出されます。 何か解決方法はございませんでしょうか。 よろしくお願いいたします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 正規表現について教えてください。 正規表現について教えてください。 以下の様なデータから末尾2文字が「01」を除くものだけを 取り出したいのですが、どのように書けばよいでしょうか。 ----------------------------- xxx01 xxx02 xxx11 xx100 xx101 xx201 ----------------------------- ※xには、0-9A-Zの何れかが設定 上記の例でいうと、 A0001:除外 A0002:出力 A0011:出力 A0100:出力 A0101:出力 A0201:出力 となります。 要は、 「A0001」は出したくないが、「A0101」、「A0201」、「A1001」などは出したいです。 末尾から3桁目が問題になるのではないかと思っています。 A[0-9][0-9]*[^1]') A[0-9][0-9]+[^1]') A[0-9][0-9][0-9][^1]') A[0-9][0-9][0-9]([^1]+)') A[0-9][0-9]([0-9]+|[0-9][^1])') A[0-9][0-9]([^0][0-9])([^1][0-9])') としてみたのですが、表示されません。 よろしくお願いします。 URL正規化について教えてください。 下記のようにPCとSPページを別々のURLで設定した場合について、正規化する方法を教えていただけますでしょうか。 PCページ (1)http://aaa.com/ (2)http://aaa.com/index.html SPページ (3)http://aaa.com/sp/ (4)http://aaa.com/sp/index.html (1)と(2)、(3)と(4)は、それぞれindex.htmlの有無の違いのみで、同一ページです。 (1)、(2)のSP版がそれぞれ(3)、(4)となります。 一般的な方法で正規化をしたいのですが、リダイレクトを全く使用せずに、alternateとcanonicalによる正規化のみで対応することは可能でしょうか。またその方法を教えてください。 それとも、301リダイレクトとalternate・canonicalを織り交ぜて正規化する方法が一般的なのでしょうか。。色々調べてみましたが、よく分かりません。。 よろしくお願いします。 htaccess URLリライトについて 自社レンタルサーバ(heteml)では稼働した以下のURLリライトが クライアントのサーバー(使えるネット)でうまく稼働してくれません Options FollowSymLinks RewriteEngine on RewriteRule ^([^/]*)/$ index\.php?cat_l=$1 RewriteRule ^([^/]*)/([^/]*)/$ index\.php?catl=$1&cat_m=$2 ./fruit/apple/ ↓ ./index.php?cat_l=fruit&cat_m=apple となってほしいのですが ./index.php?cat_l=&cat_m=apple となり cat_mだけが渡されてcat_lが空になってしまいます 中途半端に動いているので逆に原因が分かりません よろしくお願いします メールアドレスの正規表現 メールアドレスの正規表現 正規表現の勉強をしています。下記のURLのメールアドレスの正規表現の一部が理解できません。 http://hodade.adam.ne.jp/seiki/page.php?s_mail ^[a-zA-Z0-9!$&*.=^`|~#%'+\/?_{}-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ この中の「[a-zA-Z]{2,4}$」の部分がわかりません。 行末が英文字2以上4以下というのは何を表しているのでしょうか? なぜ2以上4以下になるかが理解できません・・・ 宜しくお願いします!! 初.htaccess設定。答え合わせお願いします 趣味でWEBサイトを作って公開しています。 サイトを作り直したのでアップしたいのですが、.htaccessで転送設定したほうがよいと知りました。 恥ずかしながら旧サイトで何もしておらず、URLの正規化など転送以外にしたほうがいい設定も合わせてやってみたいです。 これでアップしていいか、教えてくださる方おられましたらご指導お願いしたいです。 【やりたいこと】 ・URL正規化 ・各旧ページから各新ページへの転送 ・TOPのindexをURLに表示しない ※使用しているサーバはロリポップです。 【作成した.htaccess】---------------------- #www無しのURLに統一 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.サイトURL\.com RewriteRule ^(.*) http://サイトURL.com/$1 [R=301,L] #各ページ旧URLから新URLへの転送(中間にあるディレクトリをなくした) RewriteEngine on RewriteRule ^http://サイトURL.com/旧ディレクトリA/旧ページ1.html$ http://サイトURL.com/新ページa.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリA/旧ページ2.html$ http://サイトURL.com/新ページb.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリB/旧ページ1.html$ http://サイトURL.com/新ページc.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリB/旧ページ2.html$ http://サイトURL.com/新ページd.html [R=301,L] ・・・各ページ分用意 #index.php無しのURLに統一 RewriteEngine On RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://サイトURL.com/$1 [R=301,L] 【作成したhtaccessここまで】---------------------- <Q1>「RewriteEngine On」は、冒頭に1度書けば良いのでしょうか?それとも命令1つごとに必要なのでしょうか。 <Q2>3番め(#indexなしにする)について、 旧ページはindex.htmlですが新ページはindex.phpになりました。 その場合の書き方もこれで合っていますか? 2番めの転送設定でindex.html→index.phpにしておけばこれでいいのかなと思っているのですが・・・ <Q3>1番目~3番目の各命令を書く順序は合っていますか? 上から順に読み込むのか、そもそもどの順で書いても関係ないのでしょうか。 全くの初心者なので質問の仕方もわかりにくいかと思いますが、 教えてくださる方いらっしゃいましたらよろしくお願いいたします。 mod_rewrite について mod_rewrite について お世話になります。php初心者です。 URLのリライトを行いたくて色々調べてみたのですが問題が解消できず質問させて頂きます。 (サブドメインを使用しています) htaccessに下記のように記述しました。 RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.test\.aaa\.ne\.jp)(:80)? [NC] RewriteRule ^(.*)$ http://test.aaa.ne.jp/$1 [R=301,L] すると、 「http://www.test.aaa.ne.jp」 は、 「http://test.cns.ne.jp」 とならずにエラー画面が表示されます。(エラーコード404) URLの表示方法を換えたいと考えております。 (●●●できたら×××と表示する) それともそもそもの私の捉え方が間違っているのでしょうか。 サブドメインを使用しているからでしょうか。 ご教授頂けると大変ありがたいです。 宜しくお願い申し上げます。 簡単な正規表現ではまってます。お助けを・・・ 簡単な正規表現ではまってます。お助けを・・・ PHP5.1.6です。 アクセスされたURLの最後にハンカクスラッシュがあった場合、これを削り取って、 新しいURLへ、301のステータスコードでリダイレクトさせたいと思ってます。 で、以下のようなスクリプトを書いたのですが。。。 $this->sPattern = "/(.*)\/$/"; $_SERVER['REQUEST_URI'] = preg_replace($this->sPattern, $1, $_SERVER['REQUEST_URI']); $this->bReturn301StatusCode = true; Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /var/www/_include/class/uri.class on line 54 といわれてしまいます。 なお、54行目は、 $_SERVER['REQUEST_URI'] = preg_replace($this->sPattern, $1, $_SERVER['REQUEST_URI']); の行です。 エラーメッセージで検索したのですが、分からず。。。 どこが間違っているのでしょうか? 教えていただければ幸いです。 以上、よろしくお願い申し上げます。 mod_rewriteについて mod_rewriteについてしつもんです。 http://aaa.jp/bbb.php?c=100&d=200 ↓ http://aaa.jp/bbb_100.html?d=200 とできるんでしょうか? 設定してみたのですが、以下では機能しませんでした。 RewriteRule ^/bbb([0-9]+)\.html(.*)$ /bbb.php?c=$1$2 よろしくお願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター OS(技術者向け) Windows系OSLinux系OSBSD系OSSolaris系OSiOS(技術者向け)Android OS(技術者向け)その他(OS) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
調べていただいてありがとうございます。 参考になりました。 こんな感じでしょうかね? RewriteCond %{REQUEST_URI} !^/zzz/(.+)\.html RewriteRule ^/(.+)/(.+)\.html$ /zzz/$2.html [R=301,L] 試してみたいと思います。