rewrite Problem

Apache, Lighttpd, nginx, Cherokee
smur
Posts: 167
Joined: 2003-05-26 16:00
Location: Mannheim

rewrite Problem

Post by smur » 2013-01-19 14:06

Hi,

zur Optimierung für Suchmaschinen soll eine Website

http://www.example.com/abc umgeschrieben werden zu

http://www.example.com/index.php?site=abc


Des Weiteren

http://www.example.com/foo/bar zu

http://www.example.com/index.php?site=foo&add=bar


Mein Ansatz hierzu wie folgt:


Code: Select all

RewriteRule (de|en)/([a-zA-Z0-9\-]+)(/)?$ $1/?site=$2 [L]
RewriteRule (de|en)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]*)(/)?$ $1/?site=$2&add=$3 [L]



Das klappt aber scheinbar nicht zu 100% da völlig unerklärlich auf manchen Seiten die Eingabe tatsächlich auch die URL umschreibt anstatt es nur transparent für den Nutzer zu machen bei unveränderter URL. Habe ich einen Fehler? Kann man definieren, dass sich die URL ändert bzw. nicht ändert?


Danke & Gruß.
Nico

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: rewrite Problem

Post by Joe User » 2013-01-19 15:26

So müsste es funktionieren:

Code: Select all

RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/?$                    ${DOCUMENT_ROOT}/$1/index.php?site=$2 [L]
RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$   ${DOCUMENT_ROOT}/$1/index.php?site=$2&add=$3 [L]

Wenn Du die zweistelligen Ländercodes ebenfalls dynamisch haben möchtest:

Code: Select all

RewriteRule ^/?([a-z]{2})/([a-zA-Z0-9\-]+)/?$                    ${DOCUMENT_ROOT}/$1/index.php?site=$2 [L]
RewriteRule ^/?([a-z]{2})/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$   ${DOCUMENT_ROOT}/$1/index.php?site=$2&add=$3 [L]


Wenn Du willst, dass sich auch die URL im Client ändert, dann müsste es so aussehen:

Code: Select all

RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/?$                    http://sub.domain.tld/$1/index.php?site=$2 [L,R=301]
RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$   http://sub.domain.tld/$1/index.php?site=$2&add=$3 [L,R=301]
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

smur
Posts: 167
Joined: 2003-05-26 16:00
Location: Mannheim

Re: rewrite Problem

Post by smur » 2013-01-20 11:55

Hi,

funktioniert im Grunde genau wie meine Lösung mit dem gleichen Resultat, dass bei einer Seite die URL tatsächlich zu http://www.example.com/de/tutorials/?site=tutorials umgeschrieben wird im Browser. Liegt vielleicht doch an was anderem..?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: rewrite Problem

Post by Joe User » 2013-01-20 12:16

Wie sehen die nicht funktionierenden URL exakt aus?

Soll der Client/Browser von dem Rewrite etwas mitbekommen oder soll es transparent sein?

Du solltest .../index.php?... statt .../?... verwenden, da es potentielle Fehler vermeidet.

Bei den Rewrites ist wirklich jedes einzelne Zeichen wichtig, daher poste bitte nochmal alle(!) Deine aktuellen Rewrites.



PS: Du kannst mir auch per PN die URL nennen, dann schaue ich mir das gerne mal Live an.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

smur
Posts: 167
Joined: 2003-05-26 16:00
Location: Mannheim

Re: rewrite Problem

Post by smur » 2013-01-20 12:34

RewriteEngine on

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#RewriteRule (de|en)/([a-zA-Z0-9\-]+)(/)?$ $1/?site=$2 [L]
#RewriteRule (de|en)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]*)(/)?$ $1/?site=$2&add=$3 [L]

#RewriteRule ^/(de|en)/tutorials $1/?site=tutorials2 [L]
RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/?$ $1/index.php?site=$2 [L]
RewriteRule ^/?(de|en)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ $1/index.php?site=$2&add=$3 [L]


URL schicke ich dir per PN.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: rewrite Problem

Post by Joe User » 2013-01-20 13:31

OK, ich sehe das Problem und einen Stolperstein:
Zunächst liegt der Stolperstein im /js/-Verzeichnis, so dass die Lösung mit den dynamischen Ländercodes wegfällt.

Das Problem müsste sich so lösen lassen, bitte exakt (copy&paste) übernehmen:

Code: Select all

RewriteEngine on

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?(de|en)/([a-zA-Z0-9_-]+)/?$                    ${DOCUMENT_ROOT}/$1/index.php?site=$2   [L]
RewriteRule ^/?(de|en)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$   ${DOCUMENT_ROOT}/$1/index.php?site=$2&add=$3   [L]
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

smur
Posts: 167
Joined: 2003-05-26 16:00
Location: Mannheim

Re: rewrite Problem

Post by smur » 2013-01-20 13:51

Leider nein, mit ${DOCUMENT_ROOT}/ noch viel weniger, das muss ich ersatzlos entfernen aber ansonsten bleibt das Verhalten absolut identisch. Welche signifikanten Änderungen hast du denn vorgenommen? Auf den ersten Blick kann ichs nicht finden :)

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: rewrite Problem

Post by Joe User » 2013-01-20 14:16

Wenn Du ${DOCUMENT_ROOT} entfernst, dann musst Du den Slash drinlassen, sonst wird der Rewrite relativ zum aktuellen Pfad und genau das willst Du nicht, Du willst den Rewrite absolut zum aktuellen Pfad. Also dann so:

Code: Select all

RewriteBase /
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^/?(de|en)/([a-zA-Z0-9_-]+)/?$                    /$1/index.php?site=$2   [L]
RewriteRule ^/?(de|en)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$   /$1/index.php?site=$2&add=$3   [L]

Die Änderungen meinerseits sind die Behandlungen der Slashes, da diese in Deiner Lösung fehlerhaft sind. Dazu die RewriteConds, damit real existierende Files/Directories nicht umgeschrieben werden und RewriteBase kann grundsätzlich nicht schaden (manchmal so gar notwendig).
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

smur
Posts: 167
Joined: 2003-05-26 16:00
Location: Mannheim

Re: rewrite Problem

Post by smur » 2013-01-23 12:40

Danke, Test folgt! :)