2016-05-02 10 views
1

私は多言語のWebサイトで.htaccessを使用して、素晴らしいSEOのURLを変更しています。.htaccessすべてのディレクトリに403が許可されています

デフォルトでは、すべてのフォルダは403禁止で制限されていますが、2つのパスで例外を作成する必要があります。 /deおよび/en。はい、これらのパスは、多言語のためのものであり、私のようなページがある場合:

www.mywebsite.com/en/page 

をそれが正常に動作していますが、私はこのようなリンクをメインページに戻りしようとすると:

www.mywebsite.com/en 

それは403を示しています禁止されています。あなたは私が/enへのアクセスを許可しようとしたが、それは動作しません見ることができるように、最後の行で

RewriteEngine on 

#remove .php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

#redirect lang 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] 


RewriteCond %{REQUEST_URI} !/en 

:ここ

は私の完全なコードです。

これらのパスへのアクセスを許可するにはどうすればよいですか:/en/de

EDIT:検索の多くの後

、私はDrupalの上で作られている同じサーバー上のメインウェブサイトこと、それは自身の.htaccessファイルを持っており、それが新しい上禁止さ403を示している理由です見つけましたウェブサイト(カスタムCMS)は別のフォルダ内にあります。しかし、私がと入力すると、メインWebサイトから.htaccessをテストとして削除すると、新しいWebサイトに404が見つかりません。私はそれは単にインデックスページにリダイレクト www.mywebsite.com/en

を入力する場合は発生しません

ページが/teamだった場合、それは/en/teamのように機能し、フロントページにそれがこの/en/、ない/enのように働くので、ダブルチェックの後、私は、自動的に言語を変更する私のウェブサイト上の言語スイッチャーを見ることができます。

EDIT2

私はw3dk答えをたどってきましたが、それはまだ同じエラーが表示されます。

RewriteEngine on 

#remove .php 
#RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

RewriteRule ^([^\.]+)/?$ $1/index 


#redirect lang 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] 

言語スイッチャー機能を壊すRewriteRule ^([^\.]+)/?$ $1/indexこの行: これは私がしようとしている完全なコードです。例の場合/de/teamはドイツのコンテンツに変更されません。今、私はその行をコメントしました。「正しく機能していないからです。

私はあまりにも私の言語スイッチャーからコードを掲示しています:

<?php 
$currentURL = basename($_SERVER['REQUEST_URI']); 
?> 
     <ul class="language-switcher"> 
      <li><a href="/de/<?php echo $currentURL; ?>">DE</a></li> 
      <li><a href="/en/<?php echo $currentURL; ?>">EN</a></li> 
     </ul> 

私は

www.mywebsite.com/en/team 

このページを入力し、その後、ドイツ語版の言語スイッチャーをクリックすると、それが正常に表示さ

www.mywebsite.com/de/team

:ドイツ語コンテンツやURLは次のようです10

しかし、私はこのURLを持っているフロントページに行けば:

www.mywebsite.com 

とドイツ語版に言語スイッチャーをクリックURLは次のようになり、それが403または404ページを示しています

www.mywebsite.com/de/

+0

私はどこかのサーバーのセットアップに推測します。残念ながら、このウェブサイトは共有ホスティングにあり、Apacheの設定にアクセスすることはできません。 – user2519032

+0

'/ en'はファイルシステム上の物理ディレクトリですか?そのディレクトリに 'DirectoryIndex'文書がない場合、403はデフォルトの応答になります。 – MrWhite

+0

いいえ、 '/ en'は物理ディレクトリではありません。これにはどんな解決策がありますか? – user2519032

答えて

2

私は/en/en/index

を追加してみてくださいインデックスページをロードしますあなたの最初のルール後を次

RewriteRule ^([^\.]+)/?$ $1/index 

これは、その後、最終的index.php?lang=enに要求を書き換えて、最終的なルールによって再びキャッチされなければなりません。

代わりに、次のことを試してください。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\.]+)/?$ index.php?lang=$1 [L] 
+0

あなたのコードで再度試してみましたが、メインサーバに表示されるDrupalの.htaccessをテストとして削除しましたが、 'www.mywebsite.com/en /'と入力すると '404 not found'と表示されます。 – user2519032

+0

私のメインポストを編集しました。それを確認してください。 – user2519032

+0

私は自分の答えを更新しました。パターンの最後に '/? 'を忘れてしまった。 – MrWhite

関連する問題