xrea+と開発環境で.htaccessのRewriteRuleの挙動が異なる

このQ&Aのポイント
  • xrea+と開発環境で.htaccessのRewriteRuleの挙動が異なる問題について説明します。
  • 現在、.htaccessファイルにはRewriteRuleのルールが記述されていますが、xrea+と開発環境での挙動が異なることが発生しています。
  • 具体的には、例えばroute_8952014-00_8954061-00@06.htmlというURLを指定した場合、開発環境では正常に動作するが、xrea+では404 Not Foundエラーが発生します。なぜこのような挙動になるのか、詳細な説明をお願いします。
回答を見る
  • ベストアンサー

xrea+ と 開発環境 とで .htaccess の Rewrite

xrea+ と 開発環境 とで .htaccess の RewriteRule の挙動が違う .htaccessに、下記のように記述しています。 RewriteRule ^route_([0-9A-Za-z\-_]+)@([0-9]+)\.html$ route.php?RES=$1&RT=$2 この状態で、例えば route_8952014-00_8954061-00@06.html と指定すると、RESには'8952014-00_8954061-00',RTには'06'が渡されるはずだと思います。 実際に、開発環境(VS.Php 2.6 Standalone Edition)ではそのように動くのですが、 本番環境として使いたい、レンタルサーバの xrea+ ではそのようには動かず、 上記の例だと 404 Not Found になってしまいます。 なぜこのような挙動になるのか、ご説明いただけないでしょうか。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

正規表現のバージョン違いです。たぶんApacheのバージョン違い。1.3まではPOSIX、2.0からはPerl互換に変わっています。 両方で動かすには (.+) 等でざっくりといくか、または[0-9A-Za-z\-_] の- は []の最初か最後と決まっていたはずです。\も不要だったはず。したがって [0-9A-Za-z_-]+ かと。

stolichnaya
質問者

お礼

ありがとうございます! バッチリ動きました!!

関連するQ&A

  • htaccessでmod_rewrite

    htaccessに下記のように記述しました。 RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?p=$1 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2&y=$3 [L] RewriteRule ^sample/test/([0-9A-Za-z_]+)/$ sample/test.php?id=$1 [L] すると 「http://www.○○○.jp/index.php?p=●」 は 「http://www.○○○.jp/●/」 「http://www.○○○.jp/index.php?p=●&m=△」 は 「http://www.○○○.jp/●/△/」 「http://www.○○○.jp/index.php?p=●&m=△&y=■」 は 「http://www.○○○.jp/●/△/■」 でアクセスできました。 が、 「http://www.○○○.jp/sample/test.php?id=★」 は 「http://www.○○○.jp/sample/test/★/」 でアクセスできません。 おそらく、 「http://www.○○○.jp/sample/test/★/」を 「http://www.○○○.jp/index.php?p=sample&m=test&y=★」 として認識しているためだと思いますが、 対策がわかりません。 このような場合は、どう対処すればよいのでしょうか。

    • ベストアンサー
    • PHP
  • CentOSでhtaccessを使用してmod_rewrite

    CentOSで、htaccessを使用してmod_rewriteを利用したいのですが、いまいちどうしたらいいのかがわかりません。 動的URLを静的URLに変換したく、 htaccessに RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] と書きこみました。 すると404エラーがでます。 試しに #RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] とコメントアウトしたところ、通常に表示されました。 RewiteEngine on が何かしらの影響を与えていると思うのですが、 対策がよくわからないので質問いたしました。 ちなみにhttpd.confの設定は完了しています。 LoadModule rewrite_module modules/mod_rewrite.so と記述。

  • htaccess mod_rewriteのドット

    ワードプレスをインストールし.htaccessをのぞいてみると以下のようにあります。 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 一番下のRewriteRuleは%{REQUEST_FILENAME}がルートディレクトリ直下にあるファイルやディレクトリでなければ、RewriteRule . /index.php [L]を実行するという理解でいいでしょうか? それとRewriteRule . /index.php [L]のドットはどういう意味でしょうか? ドットは一文字ということだとおもいますが、では、mysite.co.jp/kはmysite.co.jp/indx.phpに修正される?ということでしょうか?現状では、mysite.co,jp以下に適当な文字列を入力してmysite.co.jp/dgfdhgfghfdhなどとしてもそのURLのままサイトが表示されてしまいます。記事の部分は404NotFoundなのですが。。 情報はあるのですが、調べても混乱してしまうのでご存知でしたらよろしくお願いいたします。 Apache wordpress

    • 締切済み
    • PHP
  • Apache mod_rewriteが .htaccess ではうまく適用できない

    mod_rewriteで書き換えに挑戦しているのですが、うまく動いてくれません。 やりたいことは、 http://www.example.com/ 以下をすべて http://www.example.com/index.php に書き換えたい。 開発中は直接 httpd.conf を編集できるため RewriteEngine on RewriteRule ^/((?!css|js|img).*)$ /index.php?&%{QUERY_STRING} [L] 上記で問題なく動いているのですが、htaccessではinternal errorかACCESS forbidden, object notfound などでうまく以後来ません。 ためしに、 RewriteRule aaa index.php?&%{QUERY_STRING} [L] として、http://www.example.com/aaa にアクセスしても object notfound が返ってきます。 ^aaa としたり ^aaa$ としたり、いろいろ試してるのですが全滅・・・ 検索して見つかったサンプルなどをそのままコピーしても使えません。 ちなみに、開発環境では Apache2.2.4。 公開用では 1.3系 の予定です。 Apache2.2.4 の httpd.conf ではOK。htaccess ではOUT。 難しい・・・

  • WordPressの.htaccessについて

    こんにちは。 wordpressでマルチサイトの環境を設定しようとしています。 ネットワークの設置より、次のような.htaccessを/wordpress/ディレクトリに配置しました。 --- RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L] --- このファイルを配置しなくても、 http://domain.jp/wordpress/wp-admin/network/setup.php や http://domain.jp/wordpress/wp-admin/network/users.php は表示されますし、 http://domain.jp/wordpress/ にアクセスすると1つ目のブログが表示されます。 しかしこのファイルを配置しない場合、新たに作成した2つ目のブログである http://domain.jp/wordpress/test01/ は表示されません。ファイルを配置した場合は表示されます。 しかし、ディレクトリを見ても/wordpress/にはtest01ディレクトリは存在しません。おそらくは何らかの転送を行っているのだと思いますが、上記の.htaccessファイルを配置した場合、 http://domain.jp/wordpress/test01/ はどういう法則で、どこに転送されるのでしょうか。 どなたか教えてください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • mod_rewriteでアドレスを書き換えたい

    mod_rewriteでアドレスを書き換えたい思っています。 xamppでテストしていますがうまくいきません。 mod_rewrite.soの#は外しています。(つまり、.htaccess以外の設定はできていると思います) 【やりたい事】 localhost/test/index.php?p=test を  ↓ localhost/test/i/test でアクセスしたいです。 【参考にした情報】 http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 というURLを静的なアドレスでアクセスできるように以下のように設定します。 RewriteEngine on RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L] を言うのを見つけました。 【試したこと】 .htaccessをつくり RewriteEngine on RewriteRule ^/test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] と記入 【結果】 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 と表示されました。 ------------------------------------------------------------------ localhost/test/i/testでアクセスするには、.htaccessをどう書けばいいのでしょうか? 疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? 疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? よろしくお願いします。

  • .htaccess mod_rewriteのルール

    アクセスしたフォルダのURIを引数にして特定のURLに転送するには どのような記述にすればよろしいのでしょうか? http://xxx.jp/test/test.htm これにアクセスした際に http://xxx.jp/sample/script.php?id=/test/test.htm このような感じにしたいのです。 "/"はあってもなくてもいいのですが。 一応 RewriteRule ^(.*/)$ script/test.php?id=/$1 このようなルールをあるサイトから借りましてやってみたところ .htaccessをルートフォルダに入れたらうまくいきました しかしサブフォルダの場合だとうまくいきません。 これをサブフォルダに入れた場合でも対応できるようにするには どのようにすればよいのでしょうか? よろしくお願いします

  • mod_rewriteの書き方について

    よろしくお願いします。 サーバーをhttp://80codeを使っています。 今回、mod_rewriteを使って静的アドレスにしようとしていますが、 404エラー(見つかりません)がでてしまい、うまく表示されません。 設定が間違っていますでしょうか? http://repo.teki2.com/に両方のファイルとも設置しています。 接続しに行っているアドレスは、http://repo.teki2.com/1/ です。 http://repo.teki2.com/index.php?mode=1 だとうまくいきます。 .htaccessの内容 RewriteEngine on RewriteRule ^/([0-9a-zA-Z]+)/$ /index\.php?mode=$1 [L] index.phpの内容 <?php echo $mode; ?> よろしくお願いします。

    • 締切済み
    • CGI
  • htaccessが作動しません

    初心者です。よろしくお願いします。 さくらのレンタルサーバーを利用しているのですが.htaccessをアップロードしても反映してくれません。 今、http://oshiete1.sakura.ne.jp/aaa.php?usr_no=1&log_no=11 のように最後がphpなどで終わっているものを~htmlで終わらせるようにしたいのですが上手くいきません。 ちなみにどこかのサイトを参考にして、.htaccessファイル以下を記述しアップしてみました。 DirectoryIndex mod_rewrite.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ mod_rewrite.php?var1=$1&var2=$2 [L] しかし何も起こりませんでした。 よろしくお願いします。

    • 締切済み
    • PHP
  • mod_rewriteに適用したくないファイルがある場合は?

    RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z_)]+)\.htm$ http://www.****.com/$1.php [L] ↑のようにhtaccessでphpをhtmに見せているんですが、 1.フォルダ内のphpファイルでも一部にこれを適用したくない場合はどのように書けばいいのでしょうか? 2.この.htaccessファイルがある下層のフォルダにはmod_rewriteを適用したくない場合はどのように書けばいいのでしょうか? (.htaccessの効果って下層フォルダにも効いてしまいますよね?) どちらかだけでもいいので、分かる方いらっしゃれば手助けしていただければうれしいです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう