• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Spezielle Umleitung

Werbung:
Du könntest die Aufrufe auf die index.php umleiten auf das was hinter site angegeben ist.

Code:
RewriteRule ^index.php\?site=(.*)$ $1.html [L]

musst aber gleichzeitig auch darauf achten dadurch keine Endlosschleife zu verursachen.
 
Danke für deine Antwort!

Das habe ich derzeit in meiner .htaccess-Datei stehen.
Code:
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?site=$1 [L]
Wenn ich deinen Code hinzufüge, wird leider nicht umgeleitet. Es bleibt bei der Adresse index.php?site=home.
 
Werbung:
Sorry, aber ich verstehe nicht was du mir mit deinem Codebeispiel zeigen willst. Sobald ich mein RewriteRule mit deiner URL-Umschreibung ersetzt habe, funktioniert nicht einmal mehr die Umschreibung. Wozu soll ich dann noch umleiten?
 
Du sollst sie nicht ersetzen sondern zu deiner RewriteRule ergänzen. Schließlich willst Du 2 verschiedene und voneinander unabhängige Dinge realisieren:
- Umschreibung von name.html auf index.php?site=name
- Weiterleitung von index.php?site=name auf name.html

Ersteres hast Du ja selbst hinbekommen.
Letzteres habe ich dir entworfen.
 
Werbung:
Danke schön!
Leider wird noch immer nicht umgeleitet. Wenn ich index.php?site=index eingebe, bleibt das so. Es sollte ja umleiten zu index.html.

Meine .htaccess schaut nun so aus:
Code:
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?site=$1
RewriteRule ^index.php\?site=(.*)$ $1.html [L]
Danke für deine Hilfe!
 
Schreibs mal so:

Code:
RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?site=$1 [L]
RewriteRule ^index.php\?site=(.*)$ $1.html [L,R=301]

Durch die 301 wird der HTTP-Status 301 an den Browser gesendet der daraufhin eine Weiterleitung auslösen sollte.
 
Geht leider noch immer nicht - bleibt index.php?site=index. Kann das vielleicht an bestimmten Einstellungen am Server liegen?
Aber vielen Dank für deine Hilfe!
 
Werbung:
Habe jetzt etwas gefunden, nur leider funktioniert das nicht so wie es beschrieben ist: .php -> .html Weiterleitung - ABAKUS
Code:
RewriteCond %{THE_REQUEST} index\.php\?site=
RewriteCond %{QUERY_STRING} ^site=(.*) 
RewriteRule ^index\.php %1\.html? [R=301,L]
Doch wie gesagt, wenn ich das so einfüge, dann kann ich index.html überhaupt nicht mehr aufrufen.
 
Sorry für das Pushen, aber ich bin noch immer zu keiner Lösung gekommen.
Kann das wirklich an Einstellungen des Servers liegen?
 
Ich habe es geschafft! Es funktioniert nun so, dass wenn man index.php?site=index aufruft, auf index.html weitergeleitet wird.
Code:
RewriteEngine On

# auf www weiterleiten
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} !^$ [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [L,NC,R=301]

# index.html auf / weiterleiten
RewriteCond %{THE_REQUEST} index.html [NC]
RewriteRule ^(.*)index.html(.*) /$1 [L,NC,R=301]

# Suchmaschinenfreundliche URLs
RewriteRule ^([^/]*)\.html$ /index.php?site=$1 [L,NC]

RewriteCond %{THE_REQUEST} index\.php\?site= [NC]
RewriteCond %{QUERY_STRING} ^site=(.*) [NC]
RewriteRule ^index\.php /%1.html? [L,NC,R=301]
Ich wo gelesen, dass man statt HTTP_HOST lieber SERVER_NAME verwenden und diesen validieren sollte. Hat da jemand eine Ahnung wie so etwas geht?

Habe schon angefangen, aber das funktioniert noch nicht.

Code:
RewriteCond %{SERVER_NAME} !^www\. [NC]
RewriteCond %{SERVER_NAME} ^(([a-z0-9_]+\.)+([a-z]{2,4}){1,2})$ [NC]
RewriteRule (.*) http://www.%1/$1 [L,NC,R=301]

Falls ihr den ein oder anderen Fehler (vor allem aus Sicherheitsgründen) finden solltet, so bitte ich euch mir das zu sagen, danke! Vielen Dank für eure Hilfe!

EDIT: Wann braucht man eigentlich L und NC hinter eine Zeile schreiben?
 
Zuletzt bearbeitet:
Werbung:
Mir ist schon klar, was die Flags bewirken, allerdings bin ich noch zu dumm, um zu wissen, wann man die einsetzen soll und wann man dies nicht muss/soll.

Danke für den Link zu Chris Shiflett, aber was soll ich denn nun benutzen? HTTP_HOST oder SERVER_NAME?
 
Ich habe SERVER_NAME noch nie verwendet. Ist aber dir überlassen.

[L] wenn die Rule an der das steht die letzte ist die abgearbeitet werden soll.
[NC] wenn man Groß-/Kleinschreibung auf "egal" setzen möchte (Index.php <-> index.php).
 
Werbung:
Ok, danke dir sehr!

Ein htaccess Validator hat in Zeile 10 einen Fehler ausgespuckt. Wüsste aber nicht was da falsch sein sollte.
Code:
RewriteRule ^(.*)index.html(.*) /$1 [L,NC,R=301]
Habe schon gedacht die Flags sind vielleicht falsch, das war es aber nicht.
 
Werbung:
Was es nicht alles gibt. Sowas ist nicht nötig. htaccess-Dateien validieren bringt nichts, denn der Server führt die darin stehenden Kommandos ja schon selbst aus, sobald er die Datei findet und interpretiert. Gibt es dabei ein Problem, meldet er es.

Der Validator macht diesbezüglich aber eben keinen Sinn. Ohne zu wissen, welcher Server die htaccess liest, kann man das nicht "validieren". Es gibt zwischen den Apache- und mod_rewrite-Versionen kleine, aber feine Unterschiede. Z.B. kann man in Apache 1.x kein # in einer RewriteRule-Zeile stehen lassen, in Apache 2.x hingegen geht das.

In deinem Fall ist in deiner RewriteRule tatsächlich noch ein Problem. Das hätte dir dein Webserver aber schon um die Ohren hauen sollen, wenn es für ihn wirklich ein Problem ist. Denn einen Punkt muss man eigentlich maskieren:

Code:
RewriteRule ^(.*)index[COLOR=red]\[/COLOR].html(.*) /$1 [L,NC,R=301]
 
Ah, danke dir! Habe ich doch glatt vergessen.

Und kann/darf ich jetzt den HTTP_HOST weiterverwenden? Muss ich HTTP_HOST validieren/checken, ob das ein gültiger Wert ist. Aber ich speichere ja diesen Wert nicht z.B. in einer Datenbank – der Wert dient ja nur zur Weiterleitung. Was könnte denn passieren, wenn der HTTP_HOST-Eintrag manipuliert wird?
 
Zurück
Oben