2012-04-03 33 views
2

基本的には、.htaccessのこの部分が部分的に動作していますが、まだ完全にはありません。私は英語とフランス語のサイトのために私のサーバー上に2つのサブディレクトリを持っています(サブディレクトリはそれぞれen、frです)。ユーザーがURLバーに何かを入力すると、入力した内容がenまたはfrに追加されます(ユーザーのデフォルト言語がコンピュータにあるかどうかによって異なります)。.htaccess多言語サイト

domain.com/testに入力すると(言語が英語に設定されている)、domain.com/en/test/にリダイレクトします。テストがフォルダー、ディレクトリー、ファイル、またはルート・ディレクトリーにあるANYTHINGでない場合にのみ、この問題が発生します。ここで

は、これまでの作品のようなもの私の.htaccessコードです:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteCond %{HTTP:Accept-Language} ^en [NC] 
RewriteRule ^(.*)$ /en/$1/ [R=301,L] 

私のコードの問題は、しかし、しかし、であるユーザーは、WITH(domain.com/test/のようなものに入力された場合スラッシュ)、私の.htaccessには、すべての終わりにスラッシュを強制する別の部分があるので、うまくいきません。ユーザーがdomain.com/test.htmlに入力した場合(ドメインのルートにあるファイル)、.htaccessに.html拡張子を削除する別の部分があるため、機能しません。

基本的に、このリダイレクトは、論理的にはならない場所を除いて、すべての状況で絶対に動作する必要があります。

いずれにしても、私を助けてくれたら本当にありがとう。

答えて

2

OK。これは私がそれをする方法です:

何かにかかわらず、常に/、enなどの言語の接尾辞が必要です。だからそれをURL GETとして設定してください。 PHPを使用すると、強制的に挿入することができます。 PHPまたは任意のスクリプトは、使用して

RewriteRule ^([a-z]{2})/?$ index.php?language=$1 
RewriteRule ^([a-z]{2})/register/?$ register.php?language=$1 

、あなたはIPをチェックすることができ、国は、自動的に&をGET /またはセッションを設定する設定。ので、すべてのあなたのリンクが

$url.$lang.$pagename; 

を持っている/してスラッシュをオプションに、すべてのあなたのURLにセッションを構築しますか?上記の例のように。

私は{REQUEST_FILENAME}を使用していませんが、代わりに私は可能なすべてのメインURLのリストを持っていますが、必要ならば{REQUEST_FILENAME}も使用できますが、実際のディレクトリを考慮する必要があります。

+0

私はPHPをまったく使いたくないのですが、私は.htaccessファイルの使用に興味があります。私はOPで言ったように、私は部分的に働いている。入力されたURLに最後にスラッシュがない場合は/ en /を追加します。しかし、私はそれが欲しくない場合にURLを書き換えます。例えば:ファイルがすでにルートフォルダにある場合。 – shootingrubber

+0

元のコードにも別の問題があります。私がen/subdomainに実際にいるとき、URLに別のen /が追加されます。だから私がdomain.com/en/testにいて、例をクリックすると、domain.com/en/en/exampleに行きます。 – shootingrubber

+0

ありがとう、それは私を助けた。 – Elkas