2011-07-30 12 views
1

私の.htaccessファイルを動作させようとしています。まあそれはすでに動作しますが、何か今はちょっと迷惑です。.htaccess rewritecond以外のものは一致します

私は次のように多言語ウェブサイトをサポートするために、私の.htaccessをmodyfiedています

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_URI} !^/public/[a-z]{2}/ [NC] 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

# match those that DO have a language code 
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

これは魔法のように動作します。 2文字の言語コードがURLの先頭に追加されると、?langがindex.phpに追加されます。しかし、これは問題です。私のjavascriptフォルダは "js"と呼ばれています。これは、言語コードのように扱われることを意味します。私は実際に2つの最初のRewriteCondがこれを防止すると考えましたが、明らかにそうではありません。

私は、.htaccessが私が一番好きなものではないことを認めなければならないので、単純な解決策を見逃しているかもしれません。

答えて

4

オプション#1:(代わりにあなたの最後の行の)使用このルール:

RewriteRule ^(?!js)([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

これは/js/helloのために何もしませんが、/en/helloは、(例えば)要請があれば書き換えます。

#2 オプション:は、前のルールのために持っているものと同様の条件を追加します(私は/public/js/は、JavaScriptファイルの実際のフォルダであると仮定 - 、accordignly名前を調整していない場合):

RewriteCond %{REQUEST_URI} !^/public/js/ 
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

私は#1をお勧めします - それは理解することがより難しいかもしれませんが、それは一行で、少し速くなります(#2の2つに対して1つの正規表現)。

関連する問題