Ich versuche, ein anderes SEO-System mit PHP/.htaccess zu erstellen ...
Für die Anwendung benötige ich folgende Regeln:
- Muss alle URLs abfangen, die nicht mit einer Erweiterung enden (www.foo.com --> abfangen | www.foo.com/catch-me --> abfangen | www.foo.com/dont-catch.me --> nicht abfangen).
- Muss alle URLs erfassen, die mit .php* enden (.php, .php4...) (das sind die Ausnahmen zu Regel Nr. 1).
- Alle Regeln müssen nur in einigen Verzeichnissen gelten undnichtin ihren Unterverzeichnissen (bisher/ und /framework).
- Die htaccess muss die eingegebene URL in einem GET-Wert senden, damit ich in PHP damit arbeiten kann.
Kann mir irgendein Mod-Rewrite-Assistent helfen?
Bearbeiten:
OK, nachdem ich die vorgeschlagenen Beiträge gelesen hatte, bin ich darauf gekommen, aber ich glaube, es steckt in einer Schleife fest ... Kann jemand helfen?
<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>
Da ich dies während meiner Weihnachtsferien abschließen möchte, setze ich eine Prämie aus :) Danke für Ihre Hilfe und schöne Feiertage!
Antwort1
Versuchen Sie Folgendes als Ausgangspunkt:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} !\.(.*)
RewriteCond %{REQUEST_URI} !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
Erster Regelsatz:
- Führen Sie diese Regel nicht aus, wenn der
uri
GET-Parameter gesetzt ist (sonst kommt es nach dem Anhängen desuri
Parameters zu einer Schleife bei der Umleitung zum Zielskript). - Wenn die URI ein enthält,
.
überspringen Sie diesen Regelsatz (Sie möchten möglicherweise eine spezifischere Regel für bestimmte Erweiterungen erstellen, aber dies funktioniert) - Wenn sich die URI in einem eingeschränkten Verzeichnis befindet, überspringen Sie diesen Regelsatz
- Leiten Sie weiter zu
index.php
(ggf. müssen Sie das Ziel ändern) und setzen Sie denuri
GET-Parameter
Zweiter Regelsatz:
- Wenn der
uri
Parameter gesetzt ist, überspringe diesen Regelsatz, um eine Schleife zu verhindern .php
Fahren Sie fort, wenn die angeforderte URI mit ,.php4
, oder ähnlich endet (.php123
würdenichtumgeleitet werden)- Leiten Sie weiter zu
index.php
(ggf. müssen Sie das Ziel ändern) und setzen Sie denuri
GET-Parameter
Man muss kein „Zauberer“ sein, um Mod_Rewrite-Regeln zusammenzustellen – nehmen Sie sich etwas Zeit, um selbst zu experimentieren und die von jscott empfohlene Anleitung durchzulesen.
TunStellen Sie alle Ihre theoretischen Fragen hier, wenn Sie gute Erklärungen wünschen (im Gegensatz zu praktischen Fragen, bei denen es so scheint, als würden die Antwortenden Ihr Projekt per Crowdsourcing unterstützen, anstatt Ihr Wissen zu erweitern).