2016-10-14 1 views
1

すべてのリクエストをパブリックフォルダにあるindex.phpファイルにリダイレクトする際に問題が発生しています。すべてのリクエストをパブリックフォルダのindex.phpファイルにリダイレクト

Name_of_app 
|-app 
| |--controllers/ 
|-config/ 
| |--db.config 
|-public/ 
| |--js/ 
| |--css/ 
| |--index.php 
| |--.htaccess 
|-vendor/ 
|-.htaccess 
|-composer.json 

は2つの.htaccessファイルがあり、 まずName_of_app/.htaccessファイルは、/公共/ .htaccessファイル

RewriteEngine On 

RewriteCond %{REQUEST_URI} !public/ 
RewriteRule (.*) /public/$1 [L] 

第二にはName_of_appで、これはName_of_app /パブリックフォルダへのすべてのトラフィックをリダイレクトする必要がありますされていますすべてのトラフィックは、ファイルに

RewriteEngine On 

# Some hosts may require you to use the `RewriteBase` directive. 
# If you need to use the `RewriteBase` directive, it should be the 
# absolute physical path to the directory that contains this htaccess file. 
# 
# RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

を/public/index.phpにリダイレクトの問題は、次のとおりです。
1.私はアクセスすることはできません/公開/インデックスURL www.name_of_app.com/の.phpファイル。
2. www.name_of_app.com/index.phpが/public/index.phpページが見つかりませんでしたエラー

この問題を解決するお手伝いをします。ありがとうございます。

+0

なぜルールセットを2つの別々のファイルに分割したいですか?これは状況をより複雑にし、httpサーバーをさらに遅くします。ルールを統合する。 – arkascha

+2

そのディレクトリ構造を使って、私は 'DOCROOT'を正当な' public'フォルダに設定したいと思います。 – CD001

+0

「アクセスできません」とはどういう意味ですか? _正確です。 "ショー...ページが見つかりません"というエラーは何を意味するのですか? _そのエラーはどこに表示されますか? – arkascha

答えて

0

はName_of_app /公共/ .htaccessの

DirectoryIndex index.php 

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

<IfModule !mod_rewrite.c> 
    <IfModule mod_alias.c> 
     RedirectMatch 302 ^/$ /index.php/ 
    </IfModule> 
</IfModule> 
+0

"要求されたURL/public /がこのサーバー上に見つかりませんでした。エラー結果のlocalhostの/ name_of_app/ – Dronzer1010

+0

はどのような種類Name_of_app/.htaccessの 'RewriteEngineで するRewriteCondの%{REQUEST_URI}!パブリック/ のRewriteRule(。*)/public/index.phpのために、このような方法で使用されたときにアクセスしている間$ 1 [L] ' –

0

/public/.htaccessを削除するために、次のコードを試してみてください。それが送信されたとして、あなたのPHPアプリは、その後URLを参照してください$_SERVER['REQUEST_URI']を解析する必要があり

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(?!public/(?:index\.php)?$) public/index.php [L] 

/.htaccessでこれを置きます。その内の任意のクエリを使用して$_GETの内容を上書きし、$_REQUEST$_GETから$_POSTに再生成します。簡単な方法はそうのようなものです:あなたはRewriteBaseを必要としないことがあり

$url_path = explode($_SERVER['REQUEST_URI'], '?', 2); 
if (isset($url_path[1])) { 
    parse_str($url_path[1], $_GET); 
} 
else { 
    $_GET = []; 
} 
$url_path = (string) substr($url_path[0], 1);// ignore leading '/' 

関連する問題