2017-02-09 7 views
1

URLからサブディレクトリを非表示にしようとしています.htaccessです。クライアントがウェブサイトに入るたびに実行されるPHPスクリプトがあります。 Apacheのルートディレクトリにあるindex.phpです。このスクリプトは、の言語をWebサイトで使用するように決定し、ターゲットディレクトリにリダイレクトします。英語は私のデフォルト言語ですので、"en"ディレクトリはURLに隠され、同時にルートディレクトリのすべてのURLリクエストは"en"フォルダにリダイレクトされ、404 HTTPエラー。要求は、このURLが再び表示されディレクトリ「EN」に転送されている場合.htaccess URLから特定のサブディレクトリを常に非表示にします

#Remove en/ directory from URL 
RewriteRule ^$ en/ 

#Forward all the requests to en/ directory 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ en/$1 

:私は、部分的に以下の行でこれを達成しました。これは、流れのようになります。

012にリダイレクトし

"en"ディレクトリから削除するには、リスト内の最後の操作の後にURL http://domain.com/panelを残しますか?この動作を管理するより良い方法はありますか?

現在のルール:

Options -Indexes +FollowSymlinks -MultiViews 

ErrorDocument 404 /404.php 

RewriteEngine On 

RewriteRule ^/?$ en/ [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^((?!en/).*)$ en/$1 [L,NC] 

#Prevent direct access to PHP Scripts 
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule \.php$ - [R=404,L] 

#Remove WWW 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

答えて

1

は、このようにそれを持っている:

Options -Indexes +FollowSymlinks -MultiViews 
ErrorDocument 404 /404.php 

RewriteEngine On 

#Remove WWW 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^http://%1%{REQUEST_URI} [R=301,L,NE] 

# add a trailing slash if public/$1 is a directory 
RewriteCond %{DOCUMENT_ROOT}/en/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L] 

#Prevent direct access to PHP Scripts 
RewriteCond %{THE_REQUEST} \.php[?/\s] [NC] 
RewriteRule^- [R=404,L] 

RewriteRule ^/?$ en/ [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^((?!en/).*)$ en/$1 [L,NC] 

クリアブラウザのキャッシュや、あなたの流れをテストします。

+0

私は以前と同じ動作をしています。注:.htaccessファイルはルートディレクトリにあります。 – ProtectedVoid

+0

ちょうど完全な.htaccessを追加しました – ProtectedVoid

+0

私は同じようになっています。キャッシュをクリアしたことを確認しました。 Extra note: "en"以外のディレクトリにアクセスしようとすると、404エラーが発生します。たとえば:http://domain.com/esは404エラーを返します( "es"ディレクトリは "en"と同じです) – ProtectedVoid

関連する問題