Ich habe folgendes Szenario:mod_rewrite auslassen html Verlängerungsschleife
Zwei frontcontrollers in einem Web-Verzeichnis (document root):
web/frontend.php # handles all *.html requests
web/backend.php # direct calls only
Rewriting ist einfach so weit:
RewriteCond %{REQUEST_URI} !^/backend.php
RewriteRule (.+)\.html$ /frontend.php [L]
So jetzt, wenn ich example.org/backend.php
anrufe, bin ich im Backend, nichts besonderes passiert. Und wenn ich etwas wie oder example.org/team/john.html
rufe, wird es von frontend.php
gehandhabt.
Funktioniert so weit!
Jetzt möchte ich die Möglichkeit, die Erweiterung * .html wegzulassen, so dass example.org/team/john
intern als example.org/team/john.html
behandelt wird.
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
Last but not least habe ich Anfragen an john.html
-john
zu vermeiden doppelte Inhalte umleiten möchten.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.+)\.html$
RewriteRule (.*)\.html$ /$1 [R=301,L]
Jeder Teil arbeitet auf seine eigenen, aber zusammen bekomme ich eine Schleife, das überrascht mich nicht, aber ich weiß nicht, wie dies zu vermeiden. Ich suchte die Dokumente, probierte mehrere Flaggen und Bedingungen aus, aber ich bin total festgefahren und brauche Hilfe.
Hier ist die ganze .htaccess-Datei:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
# extend html extension internally
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
# redirect example.html to example
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.+)\.html$
RewriteRule (.*)\.html$ /$1 [R=301,L]
# frontcontroller
RewriteCond %{REQUEST_URI} !^/backend.php
RewriteRule (.+)\.html$ /frontend.php [L]
</IfModule>
Jede Hilfe wäre toll.
Super! Vielen Dank! –