2016-04-26 6 views
2

Ich habe diesen Inhalt auf meinem .htaccess:htaccss Rewrite-URL umleiten, wenn Verzeichnis existiert

RewriteEngine on 
RewriteBase/
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

und auf index.php Ich habe diese:

<?php 
    var_dump($_GET); 

Wenn ich besuchen http://localhost/index.php

Ich habe das bekommen. Das ist OK:

Array (1) {[ "url"] => string (9) "index.php"}

Wenn ich http://localhost/other

besuchen Ich habe:. .. Es ist auch ok:

Array (1) {[ "url"] => string (5) "andere"}

Das Problem tritt auf, wenn ich versuche, einen Link mit einem vorhandenen Ordnernamen aufzurufen. Mit anderen Worten, wenn ich einen Ordner habe, der css genannt wird, wenn ich http://localhost/css besuche, meine URL wird: http://localhost/css/?url=css

Wie kann ich das verhindern?

Antwort

1

Aus Sicherheitsgründen wird ein vorangestellter Schrägstrich vor vorhandenen Verzeichnissen hinzugefügt, und zwar in einem Modul namens mod_dir, das nach mod_rewrite Modul ausgeführt wird. Daher erhalten Sie auch eine Abfragezeichenfolge nach dem abschließenden Schrägstrichaddition.

Sie können dies tun:

RewriteEngine on 
RewriteBase/

# add a trailing slash to directories 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302,NE] 

RewriteRule ^(.*?)/?$ index.php?url=$1 [L,QSA] 
+0

aber dies fügt ein weiteres Problem: Wenn ich besuchen 'http: // localhost /' dann lautet die URL 'http: // localhost //////// // 'mit Unendlichkeit Umleitung Fehler – psantos

+0

Lassen Sie mich testen und wiederherstellen – anubhava