2016-12-04 13 views
0

私は他の人からスクリプトを購入しました(何も気にせず、ちょっとカスタマイズされたCMSと言いましょう) "bootstrap"、 "laravel"などの名前を除いては何もありません。私は基礎を知っている人で、中級レベルから何かを知っている人ですが、もう少ししか知りませんが、私はいくつかのすばらしい解決策を見て、混乱しています。mod_rewrite(htaccess)を使用してサブフォルダをメインドメイン(ルート)にリダイレクト

奇妙な拡張子のファイルとの2つの .htaccessファイル(ルートに1つ、/ public/folderに2つ)があります。それでも、ファイルが非常に多いにもかかわらず、すべてが本当にうまく機能し、高速です。

だから、ブラウザがページ(domain.com)をロードするとき、それは/パブリック/フォルダから(私が推測する)コンテンツを要求しているようですし、すべてが正常に動作し、ドメインは、ドメインとして残っています:ここで

は、問題の説明です.com。問題は、domain.com/publicも機能していることです。domain.comのこの厄介なアドレスのインデックスに登録するのを防ぐために、この特定のアドレスにリダイレクトを作成したいのですが、domain.comはまだ正常に動作するはずです。

私はここや他のページで見つけたmaaanyソリューションを試しましたが、ページがクラッシュしたり(内部サーバーエラー)、まったく何もしませんでした。私はそれらのいくつかは、ファイルが別のサブフォルダに埋め込まれていないときだけ動作するかもしれないと思う。私は知らない、私はアイデアがありません。手伝ってくれませんか?ここで

は、ルートの.httaccess

RewriteEngine On 

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC] 
RewriteRule^%1 [L,NE,R=302] 

RewriteRule ^((?!public/).*)$ public/$1 [L,NC] 

されており、ここにある公共/ .htaccessのそれはあなたが具体的には、第1の条件+のルールでは、動作するはず持っているもののように私には見えます

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
    Options -MultiViews 
</IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 
</IfModule> 

答えて

0

ルート.htaccessはあなたが求めていることをするためのものです。

/.htaccessで:

RewriteEngine On 
RewriteBase/
# Fix URLs that begin with "public" subdirectory 
RewriteCond %{THE_REQUEST} \s/public(?:/(\S*))?\s 
RewriteRule^%1 [NS,NE,R=301,END] 
# Internally rewrite everything else 
RewriteRule ^(?!public/).* public/$0 [DPI,L] 

/public/.htaccessで:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 
    # Pretend this is the root 
    RewriteBase/
    # Redirect trailing slashes if not a folder 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ $1 [DPI,R=301,END] 
    # Handle front controller 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(?!index\.php$). index.php [DPI,END] 
</IfModule> 

あなたは、Apacheのバージョンが古い場合、あなたはよLを使用する代わりにENDすることができます私は少しそれを磨くでしょう500エラーのために知っている。

+0

Walfに感謝します。あなたのコードは何もしませんでしたが、domain.com/publicはまだロードされ、domain.comにはリダイレクトされません...理由を知っていますか? –

+0

あなたは他のページが読み込まれているかどうかは述べていません。ルート '.htaccess'の先頭にナンセンスのランダムなテキスト行を置くとどうなりますか?あなたがエラーを受け取らないなら、あなたのルールはまったく使われていないかもしれません。 – Walf

関連する問題