Page 1 of 1
rewrite Problem
Posted: 2013-01-19 14:06
by smur
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
Re: rewrite Problem
Posted: 2013-01-19 15:26
by Joe User
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]
Re: rewrite Problem
Posted: 2013-01-20 11:55
by smur
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..?
Re: rewrite Problem
Posted: 2013-01-20 12:16
by Joe User
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.
Re: rewrite Problem
Posted: 2013-01-20 12:34
by smur
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.
Re: rewrite Problem
Posted: 2013-01-20 13:31
by Joe User
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]
Re: rewrite Problem
Posted: 2013-01-20 13:51
by smur
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 :)
Re: rewrite Problem
Posted: 2013-01-20 14:16
by Joe User
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).
Re: rewrite Problem
Posted: 2013-01-23 12:40
by smur
Danke, Test folgt! :)