Zur Navigation

Query String in die URL übernehmen

1 mr.markus

Hallo zusammen,

ich verwende Joomla als Content Management System und habe dort in der Konfiguration die suchmaschinenfreundlichen URLs sowie die Verwendung von Mod_Rewrite eingestellt. Ich möchte nun gerne die folgende URL

http://beispiel.de/suche?vorname=Max&nachname=Mustermann

automatisch umleiten nach

http://beispiel.de/suche/Max/Mustermann

Ich kenne mich mit dem Thema leider gar nicht aus, habe aber bereits das Forum nach passenden Antworten durchsucht. Dabei habe ich mir die folgende Regel für die Umleitung zusammengebastelt:

RewriteCond %{THE_REQUEST} /suche
RewriteCond %{QUERY_STRING} ^vorname=(.*)&nachname=(.*)$
RewriteRule ^suche$ http://beispiel.de/suche/%1/%2? [L,R=301]

Das klappt zunächst auch wunderbar. Die Umleitung erfolgt genauso wie von mir gewünscht. Allerdings bekomme ich nicht die gewünschte Seite angezeigt, sonder eine 404 Error Page.

Meine Frage: Wie kann ich nun festlegen, dass

http://beispiel.de/suche?vorname=Max&nachname=Mustermann

und

http://beispiel.de/suche/Max/Mustermann

identisch sind?

12.04.2013 15:10

2 Jörg

Allerdings bekomme ich nicht die gewünschte Seite angezeigt, sonder eine 404 Error Page.

Dann stimmt entweder etwas nicht mit den Einstellungen in Joomla oder die suchmaschinenfreundlichen URLs schauen dort anders aus. Wohin verlinkt Joomla denn, nachdem du dort die suchmaschinenfreundlichen URLs eiongestellt hast?

12.04.2013 16:08

3 mr.markus

Wenn ich nur die suchmaschinenfreundliche URL Einstellung von Joomla verwende und die .htaccess nicht mit meinen eigenen Rewrite Rules ergänze, sieht die URL folgendermaßen aus:

http://beispiel.de/suche

Wenn ich dort dann ein Formular ausfülle und es abschicke, gelange ich zur folgenden URL:

http://beispiel.de/suche?vorname=Max&Nachname=Mustermann

Sobald ich aber in der .htaccess die entsprechenden Änderungen vornehme, werde ich weitergeleitet zu:

http://beispiel.de/suche/Max/Mustermann

Genauso will ich das ja auch haben, zumindest was die URL angeht. Mein Problem ist nur, dass die Seite nicht angezeigt wird, was eigentlich auch nicht verwunderlich ist, da es diese Seite ja gar nicht gibt. Ich will aber, dass diese Seite

http://beispiel.de/suche?vorname=Max&Nachname=Mustermann

angezeigt wird, in der URL aber

http://beispiel.de/suche/Max/Mustermann

steht.

Ich hoffe, mein Anliegen ist klar geworden. Ein Beispiel, wo so etwas bereits umgesetzt ist, findet sich unter http://nochoffen.de. Wenn man dort eine Suchanfrage stellt, gelangt man auf eine Seite bei der die übergebenen Parameter in der von mir beschriebenen Form in die URL eingefügt werden.

12.04.2013 16:21

4 Jörg

So etwas macht aber allenfalls Sinn, wenn du wie auf der verlinkten Seite ausgewählte Suchergebnisse direkt verlinken möchtest. Ansonsten würde ich eine solche Weiterleitung + Umschreibung nicht unbedingt als suchmaschinenfreundlich werten.

Das Umschreiben der URL muss mit den Rules abgestimmt werden, die Joomla in die .htaccess Datei gechrieben hat. Wie schaut denn der Rest der .htaccess Datei aus?

12.04.2013 16:40

5 mr.markus

Genau eine solche Verlinkung von Suchergebnissen möchte ich ja erreichen.

Die komplette .htaccess sieht folgendermaßen aus:

##
# @package		Joomla
# @copyright	Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved.
# @license		GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's.  If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
RewriteCond %{THE_REQUEST} /suche
RewriteCond %{QUERY_STRING} ^vorname=(.*)&nachname=(.*)$
RewriteRule ^suche$ http://beispiel.de/suche/%1/%2? [L,R=301]
#
## End - Custom redirects
#
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

12.04.2013 16:47

6 Jörg

Du könntest es so probieren:

RewriteBase /

RewriteRule ^suche/(.+)/(.+)$ suche?vorname=$1&nachname=$2

## Begin - Joomla! core SEF Section.

Edit: nachname wird wohl kleingeschrieben

12.04.2013 16:58 | geändert: 12.04.2013 17:01

7 mr.markus

Das funktioniert leider nicht. Wenn ich das mache, bleibt die URL unverändert

http://beispiel.de/suche?vorname=Hans&nachname=Peters

12.04.2013 17:02

8 Jörg

Hast du diese Weiterleitung rausgenommen:

RewriteCond %{THE_REQUEST} /suche
RewriteCond %{QUERY_STRING} ^vorname=(.*)&nachname=(.*)$
RewriteRule ^suche$ http://beispiel.de/suche/%1/%2? [L,R=301]

Die muss natürlich drin bleiben!

12.04.2013 17:04

9 mr.markus

Ich habe sie in der Tat auskommentiert. Wenn ich sie jetzt wieder reinnehme, funktioniert die Umleitung, aber ich erhalte wieder die 404 Error Nachricht. Es hat sich also durch die zusätzliche Bedingung nichts geändert.

12.04.2013 17:08

10 Jörg

Es ist keine zusätzliche Bedingung (RewriteCond), sondern eine eigene Rule (RewriteRule), die die URL serverintern umschreibt. Du willst ja zweierlei:

1. weiterleiten von der halbstatischen URL (Joomlas suchmaschinenfreundliche URL) zur vollstatischen URL (die du entworfen hast)

2. serverinterne Rückübersetzung der vollstatischen in die halbstatische URL, damit Joomla damit etwas anfangen kann.

Du hast die Rule auch genau an die von mir bezeichnete Stelle eingebaut?

Falls Joomla die URLs in PHP parst, hilft 2. hier aber nicht weiter. Dann könnte man vielleicht noch versuchen, die vollstatische URL in die dynamische URL umzuschreiben (die URL vor der SEF-Umstellung von Joomla). Dazu muss man wissen, wie die dynamische Such-URL ausschaut, und ob diese auch noch funktioniert, nachdem man in Joomla suchmaschinenfreundliche URLs aktiviert hat.

12.04.2013 17:28 | geändert: 12.04.2013 17:30