redirect alle .htm seiten zu .php

driverth

Member
21 Oktober 2006
7
0
Hallo,
Ich habe meine Webseiten von .htm auf .php umgebaut.
jetzt möchte ich in der .htaccess ein redirect schreiben mit dem zusatz 301 permanent verschoben.
in der .htaccess habe ich jetzt das stehen, was auch klappt

PHP:
ErrorDocument 404 ../404.php
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php

jetzt möchte ich den code erweitern mit [R=301]
wenn ich das einbaue klappt nix mehr
PHP:
ErrorDocument 404 ../404.php
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php [R=301]

kann mir da jemand weiterhelfen?

MFG
 
Ich weis zwar net was du genau vorhast aber ich denke so sollte es funktionieren

Code:
ErrorDocument 404 ../404.php
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.php [L,R=301]

achte darauf wirklich vorhanden Punkte zu escapen sonst bedeutet das in Moderewrite was ganz anderes ;)
 
hi, danke für die schnelle antwort,
ich habe ein webseite mit gut 600 seiten von statik .htm auf .php umgebaut, es sind auf jeder seite php code dazu gekommen.
die seite ist bei google sehr gut gelistet und das will ich ja nicht verlieren.
anfragen die noch auf .htm gehen (von suchmaschinen oder externen links)sollen direkt auf .php weitergeleitet werden.
aber ich will auch google nicht verärgern und deshalb soll da der code 301 mit rein, als permanente weiterleitung.
wie ich gelesen habe soll google das akzeptieren und das ranking dann übergeben.
was meinst du genau mit dem escapen? du hast vor dem .htm$ noch einen \ gesetzt.
 
richtig ich habs hier nochmal farbig hervorgehoben
Code:
ErrorDocument 404 ../404.php
RewriteEngine on
RewriteRule ^(.*)[COLOR="Red"]\[/COLOR].htm$ $1.php [L,R=301]

Die siehst ja selber das der Punkt ebenso zum Suchsyntax gehört, wenn man aber einen Punkt setzetn will und nicht sagen will ein belibiges Zeichen dann muss man das mit dem roten Backslash escapen.

Wäre net wild weil ein belibieges Zeichen auch ein Punkt ist, aber besser ist das;)
 
habe ich gerade ausprobiert und es klappt nicht, wenn ich [L,R=301] dahinter setze wird immer die 404 seite aufgerufen
 
Hmm das ist aber seltsam :think:

Lass mal das R=301 weg geht es dann noch? Das escapen ist normal richtig.

PS Das mit Google dürfte wurscht sein weil Google immernoch deinen htm Dateien und links sieht, deswegen dürfte dir beim PR nichts verloren gehen würde mich zumindest schwer wundern.
 
Zuletzt bearbeitet:
wenn ich das [L,R=301] weglasse geht es,
und es läuft mit und ohne \ , aber wird wohl mit richtiger sein.
das r=301 sehe ich als wichtig damit google merkt das die htm seite jetzt php heisst und dann auch alle suchergebnisse irgenwan in .php ändert.
um einzelne seiten in einen anderen ordner zu verschieben, oder zu einer anderen domain permanent umzuleiten gibt es genug beispiele in den foren, aber nicht .htm nach .php mit r=301
 
Ja weil das nicht das ist ws du denkst ;)

Mod Rewrite leitet net sichtbar um sondern das passiert Serverintern.
Du wirst immer htm Dateien im Browser aufrufen, daran wird sich auch in Zukunft nix ändern. Deswegen ist das R=301 eigentlich nicht wichtig bzw wird Serverintern nicht funktionieren(weis nicht genau)

das R=301 würde ich sagen ist für sowas in der Art gedacht

Code:
RewriteEngine on
RewriteRule ^index_test\.htm$ [url]https://www.google.de/[/url] [L, R=301]
schreibe das mal in deine htaccess und rufe im browser die datei
https://www.deine_domain.tdl/index_test.htm auf du wirst sehen die Datei gibt es net und es sollte auf google weitergeleitet werden. Dies verdeutlich vielleicht den Sinn des Serverinternen umleitens.

"Dies bedeutet dann egal was auf dem Server liegt du und google rufen die htm auf, und was dann kommt bestimmst zwar du aber goolge wird nie die php dateien aufnehmen können, weil google das genausowenig sieht wie du."

also wo die Domain sichtlich umgeleitet wird.
Aber das was du machst ist nur sozusagen eine Brücke.
Deine obere Regel mal aufgegliedert:
^ = am anfang steht
(.*) irgendwelche beliebigen Zeichen egal wieviele
\. = gefolgt von einem punkt
htm$ = htm am ende
_FREIZEICHEN_ = leite nach
$1 = in klammer gefunden
.php = endung der Datei auf die Serverintern umgeleitet wird

_FREIZEICHEN_ = Synonym für " "

Das [L] solltest du stehen lassen weil dies bedeutet abschließende Regel es folgen keine weiteren Regeln.

*edit oder habsch da was falsch verstanden willst du das der Server auf die php dann richtig leitet? Und die php Datei dann in der Browerzeile steht?

*edit 2

mach mal das
ErrorDocument 404 ../404.php
RewriteEngine on
RewriteRule ^[(.*)]\.htm$ $1.php [R=301,L]
 
Zuletzt bearbeitet:
ja genau das ist es was ich eigendlich brauch, im der browserzeile soll die php datei stehen.
in deinem beispiel steht eine datei die woanders hingeleitet wird,
da ich 600 dateien habe kann ich schlecht alle aufführen,
kann man mit der htaccess datei sagen es sollen alle .htm nach .php geleitet werden, auch in den unterverzeichnissen,
erst wenn keine .php vorhanden ist, soll auf die ErrorDocument 404 datei umgeleitet werden
 
ja das kann man ich versuche mal im laufe des tages was zu basteln. Aber das es in der Browser zeile angezeigt wird bin ich mir net sicher ob des geht.

*edit
Code:
ErrorDocument 404 ../404.php
RewriteEngine On
RewriteRule ^(.*)\.php $1.php [L]
RewriteCond %{REQUEST_URL} -f
RewriteRule ^[(.*)]\.htm $1.php [R=301,N,C]
RewriteCond %{REQUEST_URL} -F

ich weis nicht ob das so hinhaut evtl. geht es, aber versprechen kann ich nix. Nach meinem Verständnis müsste das so gehen, aber vielleicht habsch auch nen groben Denkfehler drin.

Den syntax findest du hier
 
Zuletzt bearbeitet:
klappt leider nicht,
wenn man alles zu einer anderen domain weiterleiten findet man genug beispiele,
zb.
PHP:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]

aber ich finde nirgens was um htm an php weiterzuleiten
 
.htaccess
Code:
RewriteEngine on
<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^deinedatei\.html$ deinedatei.php?%1 [L]
</IfModule>

Hoffe das das Dir weiter helfen wird ;)
 
schreib mal folgendes in deinen htaccess

Code:
 RedirectMatch permanent ^(.*)\.htm$ $1.php

könnte so vielleicht klappen. Gefunden hab ich das hier Vorraussetzung ist das geladenen mod_alias modul. Und anstatt dem permanent kannst du auch 301 hinschreiben.