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]
-----------------------------------------------------------------

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/03/11 21:40:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:yossiy7 No.1

回答回数778ベストアンサー獲得回数96

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

id:php-beginner

ここでのリンクの意味が分からないのですがリンクする事で解決するのであればご教授頂きたいです。

hoge.htmlでも正解だしhogeでも正解です。
REQUEST_URIの頭にjaを付けてるだけなので

2015/03/11 15:44:49
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

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

他3件のコメントを見る
id:taknt

片方でjaをとって 片方で jaをつけてたら 無限ループしますね。

2015/03/11 16:09:55
id:php-beginner

URLというのはブラウザ上のURLです。
情報自体は上層のファイルを参照しています。
参照元に直接アクセスされた場合はもう一つの処理のリダイレクトを行います。

現状の問題の理屈はわかるんです...
やりたいことをする為のコードが知りたいです。

2015/03/11 16:36:43
id:php-beginner

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


--------------------------------------------------------------

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]

--------------------------------------------------------------

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません