Ich wurde also gebeten, die URLs für die Webanwendung zu bereinigen, die wir derzeit auf Apache ausführen (Version 2.4.9, falls Interesse besteht), aber nachdem ich ein paar Stunden mit Mod-Re_Write-Befehlen herumgespielt habe, glaube ich, dass ich mich im Kreis drehe. Folgendes versuche ich zu tun.
Wenn die URL etwa so lautet (http://www.foo.bar/admin/index.php), lassen Sie es wie folgt anzeigen:http://www.foo.bar/admin
Wenn die URL etwa so lautet (http://www.foo.bar/admin/testpage.php), lassen Sie es wie folgt anzeigen:http://www.foo.bar/admin/testpage
Wenn die URL etwa so lautet (http://www.foo.bar/admin/testpage.php?id=15&foo=www), lassen Sie es wie folgt anzeigen:http://www.foo.bar/admin/testpage?id=15&foo=www
Bisher habe ich es so hinbekommen, dass index.php aufgelöst wird... meistens... und das zweite Beispiel aufgelöst wird... manchmal. Im Grunde genommen scheint der Code, den ich habe, sehr unzuverlässig zu sein und löst sich nur zwei Ebenen tiefer im Dateibaum auf. Ich habe mich also gefragt, ob mir hier überhaupt jemand dabei helfen könnte? Hier ist, was ich in der vhost-Datei habe (weil ich das nicht in jedem Verzeichnis als .htaccess-Datei haben wollte)
AllowOverride None
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
Antwort1
So etwas sollte funktionieren:
RewriteRule ([^/]+)/(.*)/?index.php$ $1
RewriteRule \.php $1
Bearbeiten: Die erste Regel könnte durch diese ersetzt werden, die einfacher ist:
RewriteRule (.*)/index\.php?$ $1
z.B :
URL =http://www.foo.bar/admin/index.php
Übereinstimmende Regel =RewriteRule ([^/]+)/(.*)/?index.php$ $1
Ergebnis :http://www.foo.bar/admin
URL =http://www.foo.bar/admin/testpage.php
Übereinstimmende Regel =RewriteRule \.php $1
Ergebnis =http://www.foo.bar/admin/testpage
URL =http://www.foo.bar/admin/testpage.php?id=15&foo=www
Übereinstimmende Regel =RewriteRule \.php $1
Ergebnis =http://www.foo.bar/admin/testpage?id=15&foo=www