2016-10-14 5 views
1

Ich habe Probleme beim Umleiten aller Anfrage in die index.php-Datei, die in den öffentlichen Ordner gelegt wird.Umleiten Sie alle Anfrage an index.php Datei im Öffentlichen Ordner

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

Es gibt zwei .htaccess-Dateien, Zuerst ist Name_of_app/.htaccess-Datei, das den gesamten Verkehr

RewriteEngine On 

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

Zweitens ist Name_of_app/public/.htaccess-Datei zu Name_of_app/Öffentliche Ordner umleiten sollte, dass Umleitungen alles Verkehr Datei

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] 

Probleme sind /public/index.php:
1. ich nicht/public Zugriff/index .php Datei von URL www.name_of_app.com/.
2. www.name_of_app.com/index.php zeigt /public/index.php Seite nicht gefunden Fehler

Helfen Sie mir bei der Lösung dieses Problems.Vielen Dank.

+0

Warum möchten Sie diesen Regelsatz in zwei separate Dateien aufteilen? Das macht die Dinge nur komplexer und verlangsamt den HTTP-Server weiter. Integriere die Regeln. – arkascha

+2

Mit dieser Verzeichnisstruktur würde ich 'DOCROOT' auf den öffentlichen Ordner setzen, um ehrlich zu sein. – CD001

+0

Was meinen Sie eigentlich mit "Ich kann nicht zugreifen"? _Sei genau_. "show ... page not found error" bedeutet was _exactly_? _Wo wird dieser Fehler angezeigt? – arkascha

Antwort

0

Versuchen Sie den folgenden Code für Name_of_app/public/.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

"Die angeforderte URL/public/wurde auf diesem Server nicht gefunden." Fehler beim Zugriff auf localhost/name_of_app/ – Dronzer1010

+0

Welche Ergebnisse, wenn auf diese Weise verwendet, für Name_of_app/.htaccess 'RewriteEngine On RewriteCond% {REQUEST_URI}! public/ RewriteRule (. *) /public/index.php $ 1 [L] ' –

0

/public/.htaccess löschen. In /.htaccess formulieren:

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

Ihre PHP-Anwendung dann $_SERVER['REQUEST_URI'] analysieren sollte die URL, um zu sehen, wie sie gesendet wurde. Verwenden Sie eine beliebige Abfrage darin, um den Inhalt von $_GET zu überschreiben, und regenerieren Sie dann $_REQUEST von $_GET dann $_POST. Eine einfache Möglichkeit ist etwa so:

$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 '/' 

Sie nicht RewriteBase benötigen.

Verwandte Themen