2017-06-17 22 views
2

私は解決策が見つかっていない問題があるようです。htaccess - ディレクトリを同じ名前のファイルにリダイレクト

私は同じ名前のディレクトリとファイルを設定しており、ルートフォルダのファイルにディレクトリをリダイレクトする方法が見つからないようです。私が見つけたすべての情報は、サブディレクトリのファイルに書き換えたりリダイレクトしたりするためのものでした。

dir: example.com/en-gb/

file: example.com/en-gb (extension removed with htaccess)

現在のhtaccess(関連部分):

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 
RewriteRule ^$ /en-gb [L] 
RewriteCond %{REQUEST_URI} ^/en-gb/$ 
RewriteRule . ../en-gb [R,L] 

これはちょうど、次のエラーが発生:

You don't have permission to access /en-gb/.html on this server.

任意のアイデア?これも可能ですか?

+0

"htaccessファイルを削除拡張子" - そのファイルの拡張子を持っていますか?おそらく 'en-gb.html'ですか?実際のファイルに書き換えるディレクティブとこれらのディレクティブの順序が重要になるでしょう。これらはあなたの質問に追加する必要があります。 – MrWhite

+0

明確にするために、実際には拡張子を '.htaccess'で削除していないのですか? '.htaccess'は拡張機能を追加するために使用されます(URLをファイルシステムのパスに戻す)。 – MrWhite

+0

ええ私は間違った方法で自分自身を表現しました。私はURLから拡張子を削除するために使用しましたが、もちろんファイルの後ろには存在します –

答えて

1

通常、/directoryを要求すると、mod_dirは301リダイレクトを発行して末尾にスラッシュを追加します。 /directory/(URLを修正するため) mod_dirは、そのディレクトリ内からディレクトリ索引文書を提供することができます。

残念ながら、これはの前に発生し、 mod_rewriteが要求を処理できるように見えます。だから、あなたは.htaccessでこの動作を無効にする必要があるとしている。

DirectorySlash Off 

その後、内部の代わりに、ファイルへのリクエストを書き換えることができます。例えば。それが存在する場合/directoryは内部/directory.htmlに書き換えます:しかし

RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^([^.]+)$ $1.html [L] 

DirectorySlashが持つ無効それは警告だ - あなたはディレクトリのすべての要求がすでに最後のスラッシュを持っていることを確認する必要があります(またはとして.htaccessでこれをチェックしようとしていますよく)。また、ドキュメントのセキュリティ警告に注意してください。

参考:
​​

関連する問題