2011-12-13 13 views
2

私は、多言語ウェブサイトと.htaccessを持っています、。.htaccessでリダイレクトする方法は? =>/UA /に/?<strong><em>すべてのページ</em></strong>と<strong><em>言語</em></strong><em>?LANG = UA</em>スタイルを表示します。LANG = UA

私は(コード301を使用して)リダイレクトRewriteEngineでsite.com/?lang=ensite.com/en/を要求します。

例:この基準を満たすためにはApache用のhtaccessファイルを準備する方法

site.com/en/    => site.com/?lang=en 
site.com/ua/news.html  => site.com/news.html?lang=ua 
site.com/ua/news/2-material-two.html => site.com/news/2-material-two.html?lang=ua 
and so on much... 

?そしてどうしますか?事前に

おかげ

+2

私はあなたがサーバーの不具合でこの質問をするべきだと思います。 –

答えて

0

これを試してみてください:それはかなり右ではないかもしれないので、

Options +FollowSymlinks 

RewriteEngine on 

RewriteOptions MaxRedirects=10 

RewriteBase/

RewriteRule http://site.com/([^/]+)/(.+).html$ http://site.com/$2.html?lang=$1 [R=301,NC] 

私はちょうど私の頭の上から一緒にこれを入れてきましたが、アイデアは、それは検討するということですURLと([^/]+)は1番目のディレクトリを読み込み、.htmlまですべてを読み取る必要があります。

はその後

1

がDOCUMENT_ROOTの下であなたの.htaccessファイルにこのコードを入れて第一DIRの] .htmlの?LANG = [名前]を.htmlのために第一dirのアップ後site.com/[everythingするURLを書き換えDIR:!

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^([^/]+)/(.*)$ /$2?lang=$1 [L,R=301,QSA] 
+0

これも良い解決策ですが、すべてのディレクトリレベルでこのように別の書き換えルールが必要なため、それ以上のレベルのディレクトリは許可されません。いくつかのレベルがある場合は、より動的なメソッドを使用する方が良いです。 – FluffyKitten

+0

@FluffyKitten:答えを確認してください。これは完全に汎用的でOPのすべてのテストケースで機能します。 – anubhava

+0

ニート溶液。私はすぐに一緒に投げ込まれたものよりもはるかに小さいので、アップアップするつもりです!ちょうど2つのこと:NCコードも追加します。それ以外の場合は大文字と小文字が区別され、RewriteOptions MaxRedirects = 10をインクルードします。何か問題が生じた場合に備えて、無限ループを防ぎます。 @Areku_UAあなたはこの解決策を受け入れるべきです、それは評判のあるanubhavaに報酬を与え、あなたに受け入れられた答えの評価も与えます。 – FluffyKitten

0

あなたは、一般的な「おそらくディレクトリマッチング」-ruleを使用する必要がある場合

RewriteEngine On 
RewriteBase/

#if the lang param is not present 
RewriteCond %{QUERY_STRING} !^lang= 
#capture the language code and redirec to url with lang param 
RewriteRule ^([a-zA-Z]+)/(.+\.html)$ /$2?lang=$1 [L,R=301,NC] 
+0

こんにちは、anubhava!ここに来た。あなたの答えを試しました。すべてが機能します。かなり正しくはありませんが、過剰を取り除く必要があります。結論 - 'http://site.com/ua/material-1?lang = ru' =>を修正する必要があります - ' http://site.com/material-1.html?lang = ru'(削除するには余分な '/ ua /'と '.html'を追加して)修正できますか?私はリダイレクトについて知らない。答えを待っている。前もって感謝します。 –

+0

ありますか?あなたはこの投稿を読んでいますか? –

0

、-d演算子を検討してください、ドメインのルートにあなたのhtaccessファイルに次の行を追加します。 (そしてオプティonal:!-f演算子)。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z]{2})/ http://site.com/?lang=$1 [R=301,L] 

既存のファイルやディレクトリにあらゆる種類の奇妙な問題が修正されることはありません。

関連する問題