Probleme mit der inkonsistenten Anwendung von Mod_Rewrite-Regeln

Probleme mit der inkonsistenten Anwendung von Mod_Rewrite-Regeln

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

verwandte Informationen