2016-08-23 4 views
0

Meine aktuelle HTACCESS sieht so aus.HTACCESS Redirect zu index.php: PHP-Ebene in Unterordner beheben

# Run everything else but real files through index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$ 
RewriteRule ^(.*)$ index.php?p=$1 [NC,L,QSA] 

Großes Stück Code, wo, wenn ich in geben, was ein Unterordner Verzeichnis sein würde, leitet es als Parameter an index.php. Funktioniert gut für etwas http://localhost/blah (die wie http://localhost/index.php?p=blah umleitet), aber nicht so gut für http://localhost/blah/boink.

Das Problem mit letzterem ist, dass die Umleitung funktioniert und auf index.php umleitet, aber aus irgendeinem Grund glaubt die Seite, dass es auf der Unterordner-Ebene blah ist. Also sind alle meine fest codierten ../ für meine js, css, include und require_once Pfade jetzt technisch "falsch". Wie auch immer, dies zu beheben?

In PHP, wenn ich versuche, dies zu tun:

$file_url = explode("/", $_SERVER['PHP_SELF']); 

// subtract 1 for left/and 1 for current file 
$dir_loop = count($file_url) - 2; 
$up_dirs = ""; 
// loop until to root directory 

for ($i=0; $i<$dir_loop; $i++) { 
    $up_dirs .= "../"; 
} 

... das scheint nicht zu funktionieren, weil die index.php im Stammordner Ebene ist. Ich vermute, dass dies ein HTACCESS-Problem sein könnte? Gedanken?

+0

Verwenden Sie den '' Tag für die Anbindung an JS/CSS usw. – hjpotter92

+0

_ „aber aus irgendeinem Grund, die Seite glaubt, dass es im Unterordner Ebene ist,' blah'“_ - Das ist kein "Glaube", sondern einfach die Realität. Der _client_ ist derjenige, der relative Pfade zu absoluten auflöst, und _client_ hat das Dokument von der Adresse "http: // localhost/blah/boink" angefordert. Das ist alles, was es weiß; Es weiß nicht, was Ihr _server_ mit der Anfrage _internally_ tut. – CBroe

+0

Sie können immer bestimmte Dir, z. 'rewritecond!^(js | css | include) /' Und beachte, dass require/include in PHP im Dateisystem funktioniert. es sei denn, Sie tun etwas (dummes) wie 'include ('http://yoursite.com/include/foo.php')', alles, was php zum Laden einer Datei tut, wird NIEMALS von apache oder mod_rewrite gesehen. –

Antwort

0

@Ron van der Heijden hat mich in: RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$. Modifiziert den Code wie folgt:

# Run everything else but real files through index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_URI} !^.*\.(js|css|png|jpe?g|gif|ico)$ [NC] 
RewriteRule ^(.*)$ index.php?p=$1 [NC,L,QSA]