URL Vereinfachung per mod_rewrite funktioniert nicht

Alles, was den Apache betrifft, kann hier besprochen werden.

URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 19. September 2014 23:29

Hallo zusammen

Gerne würde ich mittels des mod_rewrite die URL vereinfachen. Dazu bin ich wie folgt vorgegangen:

Code: Select all
a2enmod rewrite


danach im

Code: Select all
/etc/apache2/sites-enabled/000-default


folgendes eingetragen:

Code: Select all
<Directory /var/...
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
    RewriteRule ^(.*)/(.*)\.htm$ index.php?Page=$2&Language=$1 [QSA]
...ectory>


Ich möchte eigentlich, dass er von der URL

www.test.com/index.php?Page=Start&Language=en

diese erstellt

www.test.com/en/Start.htm

Leider funktioniert es nicht, respektive es passiert nichts wenn ich die Seite aufrufe.

Könnt ihr mir vielleicht weiterhelfen?

Vielen Dank und liebe Grüsse

Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 20. September 2014 11:29

So wie es aussieht, hast Du genau das falsch herum gemacht. In Deiner RewriteRule wird aus

www.test.com/en/Start.htm

die URL

www.test.com/index.php?Page=Start&Language=en

erstellt und aufgerufen. Wobei der Domainname nicht in der RewriteRule auftaucht, genauer passiert also das:


en/Start.htm

wird umgeschrieben zu

index.php?Page=Start&Language=en
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 20. September 2014 16:26

Hallo und vielen Dank für deine Antwort:

Wie muss den die ReWrite Regel aussehen? So:

Code: Select all
RewriteRule index.php?Page=$2&Language=$1 ^(.*)/(.*)\.htm$ [QSA]


Liebe Grüsse Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 20. September 2014 17:08

MisterDeeds wrote:
Code: Select all
RewriteRule index.php?Page=$2&Language=$1 ^(.*)/(.*)\.htm$ [QSA]



Nein, das ist doppelt bis dreifach falsch. Das geht auch so nicht, da der Querystring nicht Bestandteil der URL ist. Du musst mit Hilfe der sog. "RewriteCond" den Querystring zerlegen und Variablen zuordnen.

Am besten liest Du Dir die Dokumentation dazu durch und ggf. auch ein paar Tutorials, weil man das nicht "einfach so" kann. An Deinem Vorschlag erkenne ich, dass Du nicht ansatzweise verstehst, wie das ganze System funktioniert. Bevor Du Dich aber völlig verhedderst, solltest vielleicht mal ausführlicher erklären, wieso Du das so haben willst, denn das ist sehr ungewöhnlich, nicht aus Versehen ist das erste Beispiel (was Du sicher irgendwo abgekupfert hast) so herum und nicht anders.

P.S.: Insgesamt könnte es durchaus einfacher sein, das nicht mit URL Rewrite zu machen, sondern einfach in der index.php eine entsprechende Weiterleitung einzubauen. Da hat man die Variablen schon fertig bestückt vorliegen und kann sehr einfach die neue URL bauen.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 20. September 2014 21:00

Hallo und danke für deine Antwort.

Ich habe mich in der Zwischenzeit mit dem Rewrite befasst. Die Weiterleitung funktioniert auch so wie sie soll, jedoch wird diese auch bei den css und js Dateien gemacht, was zur Folge hat, dass der Pfad nicht mehr korrekt ist.
Mein Rewrite sieht nun so aus:

Code: Select all
RewriteEngine On
RewriteBase /var/www/
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !\.(js|css)$
RewriteRule ^([^/]*)/([^/]*)$ /index.php?Page=$2&Language=$1 [L]


Im Quelltext der Seite steht es so drin:

Code: Select all
<link rel='stylesheet' type='text/css' href='css/style.css' />


wenn ich jetzt aber den Link im Quelltext anwähle kommt die Fehlermeldung:

Code: Select all
<p>The requested URL /EN/css/style.css was not found on this server.</p>


Könnt ihr mir weiterhelfen?

Danke und liebe Grüsse

Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 21. September 2014 11:25

Code: Select all
RewriteRule ^([^/]*)/([^/]*)$ /index.php?Page=$2&Language=$1 [L]


... und jetzt ist wieder anders herum. Wie denn jetzt???
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 21. September 2014 11:33

Hallo Nobbie

Sorry hatte mich zu beginn falsch ausgedrückt. Es ist natürlich von:

www.test.com/DE/Start

auf

www.test.com/index.php?Language=DE&Page=Start

Das funktioniert nun mit meiner Rewirte Rule auch. Leider ist es aber so, dass es eben auch bei den css und js Dateien gemacht wird, was zur Folge hat, dass der Pfad nicht mehr stimmt.

Habe schon jenste RewriteCond ausprobiert, leider ohne Erfolg.

Liebe Grüsse Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 21. September 2014 11:53

Nimm mal die RewriteCond für js|css heraus und baue einfach in die RewriteRule in das Pattern am Ende die Erweiterung htm ein:

Code: Select all
RewriteRule ^([^/]*)/([^/]*htm)$ /index.php?Page=$2&Language=$1 [L]


Wobei mir die Fehlermeldung allerdings eher so aussieht, dass die js und css Dateien eben jetzt schon nicht umgeleitet werden (so wie es auch sein soll), deswegen wird ja auch /EN/css/style.css angemault, sonst würde ja einfach index.php mit entsprechenden Parametern aufgerufen (index.php?Page=style.css&Language=EN).
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 21. September 2014 13:58

Hallo Nobbie

Danke für deine Antwort. Ich habe die Zeile rausgenommen, leider bringt dies keinen Unterschied.

Was mir aufgefallen ist, dass die Seitenadresse ja so lautet: "http://test.com/DE/Start" und die css Datei wird anschliessend im "DE"-Verzeichnis gesucht. Dieses Verzeichnis existiert aber nicht.

Wenn ich jetzt zuerst einen Ordner zurück gehe (mittels ../) wird die Datei gefunden.

Code: Select all
<link rel='stylesheet' type='text/css' href=../css/style.css' />


Natürlich könnte ich im ganzen Projekt die Pfadangaben anpassen, aber dies ist sehr umständlich. Gibt es eine andere Lösung?

Liebe Grüsse Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 21. September 2014 15:05

MisterDeeds wrote:Gibt es eine andere Lösung?


Auch ein Rewrite.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 21. September 2014 15:14

Ja das dachte ich mir schon... bloss wie sieht der aus?
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 21. September 2014 15:24

MisterDeeds wrote:Ja das dachte ich mir schon... bloss wie sieht der aus?


Du muss doch offensichtlich aus so etwas

Code: Select all
EN/css/datei.css


sowas machen

Code: Select all
../css/datei.css


oder vielleicht sogar so:

Code: Select all
/css/datei.css


Das ist so dermaßen einfach, das kriegst Du selbst hin.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby MisterDeeds » 22. September 2014 22:06

Hallo und danke für deine Antwort.

Ich habe es nun so hinbekommen:
Code: Select all
RewriteCond %{REQUEST_URI} !\.(js|css|gif|png|jpg|jpeg)$
RewriteRule ^([^/]*)/([^/]*)$ /index.php?Page=$2&Language=$1 [L]


und im head der Seite noch die Base angeben:

Code: Select all
<base href='http://www.test.com'>


Danke füe die Hilfe und liebe Grüsse

Lars
MisterDeeds
 
Posts: 7
Joined: 19. September 2014 23:21
Operating System: debian 7 / Apache 2.2.22-13

Re: URL Vereinfachung per mod_rewrite funktioniert nicht

Postby Nobbie » 23. September 2014 10:04

MisterDeeds wrote:
Code: Select all
<base href='http://www.test.com'>


Das hätte ich nicht getan, da muss man ja jede Datei (auch neue) immer nachbearbeiten. Eine ebenso einfache, aber zentrale(!) Lösung wäre ein Alias gewesen (evtl. pro Sprache einer).

Oder eben (wie original vorgeschlagen), eine simple Regel für einen Rewrite. Aber die Dokumente selbst hätte ich nicht bearbeitet.

Ich finde auch nach wie vor die RewriteCond nicht gelungen, da musst Du ja andauernd aufpassen, ob nicht noch ein weiterer Dokumententyp dazukommt (ggf. pdf oder so). Einfach (wie ich es oben gezeigt habe) in der RewriteRule das "htm" am Ende angeben und schon gilt diese Regel wirklich nur für htm Dateien. Egal was noch dazu kommt.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 3 guests