人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

RewriteEngineに関して質問です。
下記の2つの動きを行いたいのですが考えたスクリプトだと無限ループしてしまいます。
それぞれのスクリプト単体だと正常に動作するのですが2つ記述すると無限ループとなります...
なにか良い記述の仕方はないでしょうか?

http://example.com/hoge
→URIの先頭に「ja」のフォルダを付けてリダイレクト「http://example.com/ja/hoge」

http://example.com/ja/hoge.html
→URLを変えずに「http://example.com/hoge.html」の情報を表示

-----------------------------------------------------------------
RewriteEngine On

#ルート以降が/ja,/us,/zh,/twの場合、URLを変えず上層フォルダからパスを取得
RewriteCond %{REQUEST_URI} ^/(ja|us|zh|tw)/
RewriteRule ^.*?/(.*?)$ $1 [L]

#ルート以降が/ja,/us,/zh,/tw以外のURLは全て/jaを先頭に付けてリダイレクト
RewriteCond %{REQUEST_URI} !^/(ja|us|zh|tw)/
RewriteRule ^.*$ http://%{HTTP_HOST}/ja%{REQUEST_URI} [L]
-----------------------------------------------------------------

●質問者: php-beginner
●カテゴリ:ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 勇者よっしー

そもそも2つのスクリプトがリンクしてない。
最初のスクリプトの飛び先がhogeで止まってるけど、hoge.htmlが正解なのでは?


php-beginnerさんのコメント
ここでのリンクの意味が分からないのですがリンクする事で解決するのであればご教授頂きたいです。 hoge.htmlでも正解だしhogeでも正解です。 REQUEST_URIの頭にjaを付けてるだけなので

2 ● きゃづみぃ

上と下の順番を変えてみたらいかがでしょうか?


きゃづみぃさんのコメント
下で jaをつけると 再度 最初からになってしまうような気がします。

php-beginnerさんのコメント
上下逆でもダメですね。 おそらく最初からになっているのでループしているんだと思います。 でもjaをつけないとやりたい処理が動かなくなってしまいます。

きゃづみぃさんのコメント
>> http://example.com/ja/hoge.html →URLを変えずに「http://example.com/hoge.html」の情報を表示 >> URLを変えずにとありますが、jaが抜けてますけど?

きゃづみぃさんのコメント
片方でjaをとって 片方で jaをつけてたら 無限ループしますね。

php-beginnerさんのコメント
URLというのはブラウザ上のURLです。 情報自体は上層のファイルを参照しています。 参照元に直接アクセスされた場合はもう一つの処理のリダイレクトを行います。 現状の問題の理屈はわかるんです... やりたいことをする為のコードが知りたいです。

質問者から

環境変数を用いる事で自己解決しました。


--------------------------------------------------------------
RewriteEngine On

SetEnvIf REQUEST_URI ^/(ja|en|zh|tw).* lang=1

RewriteCond %{ENV:lang} 1
RewriteRule ^.*?/(.*?)$ $1 [L]

RewriteCond %{ENV:REDIRECT_lang} !1
RewriteRule ^.*$ http://%{HTTP_HOST}/ja%{REQUEST_URI} [L]
--------------------------------------------------------------


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ