2017-02-06 16 views
1

Ich muss domain.com/abcdef.html zu domain.com/abcdef umleiten und der Inhalt der neuen URL sollte domain.com/abcdef.html sein.URL umleiten und ändern von HTML zu keiner HTML htaccess

Ich wirklich kämpfen hier. Ich kann erreichen, den Inhalt vom HTML zu erhalten, ohne das HTML in der URL zu haben, aber dann sind beide URLs verfügbar.

Wenn ich versuche, beides zu erreichen, bekomme ich eine Endlosschleife und eine ERR 500, aber ich habe keine Ahnung, wie ich diese Endlosschleife verhindern kann.

so mein Versuch ein - macht beide URLs mit dem gleichen Inhalt wie folgt aussieht:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

Die zweite Regel withtout die ersten beiden Zeilen genau das gleiche ist:

RewriteRule ^(.*)\.html$ /$1 [L,R=301] 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

resultierenden in eine endlose Schleife. Meine Recherche brachte mich nur zu Lösungen für einen oder einen Versuch mit der index.php. Aber ich suche nach einer htaccess-only-Lösung.

Ist es möglich?

EDIT: Ich verstehe, warum die endlessloop passiert, bitte ich blabla.html -> Regel 1 macht es blabla und Anfragen wieder, Regel 2 macht es Anfragen wieder blabla.html und so weiter. Aber wie kann ich das verhindern?

EDIT 2: Also habe ich versucht, wie durch starkeen vorgeschlagen, und hatte dies:

RewriteEngine On 
RewriteCond %{ENV_REDIRECT_STATUS} 200 
RewriteRule^- [L] 
RewriteBase/
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

die zur endlessloop führen nach wie vor. Die Verwendung mit dem RewriteCond steht immer noch zur Verfügung (blabla.com/content.html und blabla.com/content)

Leider ist es nicht Apache 2.4, also konnte ich das END-Tag nicht versuchen, aber ich versuche, meinen Hoster zu erreichen frag sie, wenn ich sie aktualisiere.

Oder habe ich dich falsch verstanden und etwas mit dem htaccess gemischt?

EDIT 3: Also, da mein Code funktionieren sollte, aber nicht, hier der ganze htaccess, um sicherzustellen, dass es nichts anderes gibt, das den **** vom Arbeiten blockiert.

AuthName "nottellingyou" 
AuthType Basic 
AuthUserFile /home/www/top/secret/.htpasswd 
AuthGroupFile /dev/null 
require valid-user 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{ENV_REDIRECT_STATUS} 200 
RewriteRule^- [L] 
RewriteBase/
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

Antwort

1

die Schleifenfehler zu vermeiden, setzen Sie die folgende Regel unten RewriteEngine On Linie

RewriteCond %{ENV_REDIRECT_STATUS} 200 
RewriteRule^- [L] 

Dies beendet interne Rewrite-Verarbeitung auf der 2. Iteration so /file.html nicht auf die gleiche neu geschrieben werden erhalten Pfad wieder.

Auf Apach 2.4 Sie END-Flag in Ihrem RewriteRule verwenden können, um die interne Schleife zu verhindern

RewriteRule ^([^.]+) $1.html [END] 

die Erweiterung .html zu entfernen, können Sie auch dieses Skript verwenden:

RewriteEngine on 


#1)redirect /file.html to /file 

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] 
RewriteRule^/%1 [NE,L,R] 
#2)check if /file exists as an .html ,if it exists ,rewrite /file to /file.html 
RewriteCond %{REQUEST_FILENAME}.html -f 

RewriteRule ^(.*?)/?$ /$1.html [L] 
+0

Hey danke für die Hilfe, aber leider würde es für mich nicht funktionieren! Könnten Sie bitte meine Bearbeitung überprüfen, wenn ich es richtig gemacht habe? –

+0

@marcel Sie verwenden die Regel nicht korrekt. Es sollte unter RewriteEngine in Zeile sein. – starkeen

+0

vielen Dank, ich habe es falsch gelesen wie zuvor RewriteEnginge irgendwie. Aber leider gleicher Effekt. (editedhow sieht jetzt so aus -> führt zu loop für mich) –