Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » Sonstige Sprachen » .htaccess: Parameter-Umleitung?    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Newler
Mitglied
Neuling


Dabei seit: 03.04.2017
Herkunft: keine Angabe
Posts: 6
     .htaccess: Parameter-Umleitung? Zitat | Bearbeiten

Guten Abend, liebes Board.

Mittels .htaccess passe ich die URI's wie folgt an:

Aus xyz.de/?site=Suche
wird xyz.de/Suche/
und aus xyz.de/?site=Suche&key=Suchbegriff
wird xyz.de/Suche/Suchbegriff/

Wenn ich nun jedoch ein Formular per GET auf xyz.de/Suche/ leite,
wird ?key=Suchbegriff angefügt (=> xyz.de/Suche/?key=Suchbegriff) und nicht auf xyz.de/Suche/Suchbegriff/ weitergeleitet.

Ich habe viel gegooglet und kam bisher nur zu dem Ergebnis,
dass man es über eine 301-Weiterleitung lösen sollte.

Hat jemand vielleicht einen Lösungsansatz bzgl. meines Anliegens?

.htaccess bisher:
 Code 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
RewriteEngine On
Rewritebase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/$ /?site=$1&key=$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /?site=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
Ich bedanke mich schon mal im Voraus für eure Mühe!

Liebe Grüße



03.04.2017, 19:44 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2364
      Zitat | Bearbeiten

Das liegt daran, dass der Browser die Daten entsprechend immer in dieser Form dann beim abschicken des Formulars an die im "action" Attribute angegebene URL hängen wird.

Ich glaube, du verwechselst die "Reihenfolge" von mod_rewrite. mod_rewrite schreibt nicht wirklich die URL um, sondern gibt viel mehr an, wie der Server es serverseitig entsprechend interpretieren bzw. für sich selbst "umschreiben" soll.

Also du sagst ihm, dass wenn jemand xyz.de/suche eingibt, er es als xyz.de/?site=Suche händeln soll. Genau so kannst du auch sagen, dass er xyz.de/suche/Suchbegriff als xyz.de/?site=Suche&key=Suchbegriff interpretieren soll.

Der Browser weiß aber absolut nichts davon. Für den Browser ist die URL xyz.de/suche/ dann entsprechend wie ein Verzeichnis auf dem Server. Erst der Server interpretiert es dann so, wie du es in der .htaccess Datei angegeben hast.

Was du machen könntest, wäre eine einfache Weiterleitung von xyz.de/?key=Suchbegriff dann auf xyz.de/suche/Suchbegriff.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
03.04.2017, 21:04 Profil | PM | E-Mail  
Newler
Mitglied
Neuling


Dabei seit: 03.04.2017
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Manuell ist es möglich, auf xyz.de/Suche/Suchbegriff zuzugreifen, nur für diese "einfache Weiterleitung" bei Eingabe von xyz.de/Suche/?key=Suchbegriff auf xyz.de/Suche/Suchbegriff/ fehlt mir jeglicher Ansatz.

Liebe Grüße


03.04.2017, 22:46 Profil | PM | E-Mail  
Newler
Mitglied
Neuling


Dabei seit: 03.04.2017
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Entschuldige den Doppelpost.

Meinst du mit "einfache Weiterleitung" über PHP oder .htaccess?


04.04.2017, 16:41 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2364
      Zitat | Bearbeiten

Zitat:
Orginal von Newler
Entschuldige den Doppelpost.

Meinst du mit "einfache Weiterleitung" über PHP oder .htaccess?


Das müsste auch per .htaccess Datei funktionieren, aber das habe ich noch nicht gemacht, weswegen jemand anderes dann hier ein Beispiel posten müsste, wie das auszusehen hat, wenn man /suche/?key=SUCHBEGRIFF auf /suche/SUCHBEGRIFF per .htaccess Umleiten möchte.

Aber bei Google gibt es da einige Anleitungen zu RedirectMatch und mod_rewrite. Das müsste mit eins dieser Module eigentlich leicht möglich sein.

Ansonsten per PHP eben die aktuelle URL überprüfen und entsprechend darauf reagieren. Wurde die URL mit ?key= aufgerufen, wird entsprechend weitergeleitet und wenn nicht, wird die Suche durchgeführt und das Ergebnis angezeigt.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
04.04.2017, 17:42 Profil | PM | E-Mail  
Newler
Mitglied
Neuling


Dabei seit: 03.04.2017
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Mit
 Code 
1:
2:
RewriteCond %{QUERY_STRING} ^key=(.*)$
RewriteRule ^?key=(.*)$ http://%{HTTP_HOST}/Suche/$1/ [L,R=301]
funktioniert's leider nicht.

Gibt es Vor- und Nachteile, wenn ich über PHP eine 301-Weiterleitung über einen beliebigen GET-Parameter auf xyz.de/Suche/Suchbegriff vornehme?

Nehmen wir mal an, ich habe ein Textfeld für den oder die Suchbegriff(e) mit name="search". Das Formular wird abgeschickt auf die index.php, welche prüft, ob der "search"-Parameter angegeben wurde, wenn ja erfolgt die Weiterleitung auf xyz.de/Suche/Suchbegriff/:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php 
// $_GET["site"] kann mittels .htaccess über xyz.de/Seite/ aufgerufen werden,
// - deshalb darf er nicht gesetzt sein.
if(!isset($_GET["site"]) && isset($_GET["key"]) && !empty($_GET["key"])) {
    
$key urlencode($_GET["key"]);
    
header("Location: http://www.xyz.de/Suche/$key/"true301);
    exit;
}
?>
So funktioniert es zwar, aber ob es die optimalste Lösung in Bezug auf die Suchmaschinen ist?

Liebe Grüße


04.04.2017, 19:32 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2364
      Zitat | Bearbeiten

Also generell ist es für Suchmaschinen kein Problem, wenn du die richtige Weiterleitung verwendest, was in deinem Fall die 301 ist.

Ich würde das Ganze aber auch nicht überbewerten. Die Suchmaschine sucht ja nicht mit deinem Formular, also kommt es eher darauf an, was passiert, wenn jemand irgendwo auf ein Suchergebnis deiner Suche mit der Variante "/suche/?key=suchbegriff" verlinkt. Das wird aber nicht wirklich der Fall sein, weil die Weiterleitung wird der Nutzer gar nicht wirklich sehen/spüren und wird dann wenn sowieso die Variante mit /suche/Suchbegriff verwenden.

In deinem Fall würde ich einfach dem Submit-Button von dem Formular einen Namen geben, weil dann wird er auch in der URL übertragen. Wenn du ihm dann z.B. den Namen "submit" gibst, musst du in deinem Skript, wo dann die Suche stattfindet, nur folgendes machen:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php

// [...] anderer Code
if( isset($_GET['submit']) )
{
    
// Der Nutzer kommt gerade vom Formular mit der "unschönen" URL-Variante => also weiterleiten
    
header('Location: /suche/'.rawurlencode($_GET['key']));
    exit;
}
// [...] restlicher Code


Nach der Weiterleitung ist das &submit= nicht mehr in der URL gesetzt, also wird isset($_GET['submit']) false zurückliefern und es kommt zu keiner Weiterleitung, weil die schöne Variante bereits verwendet wurde.

Und wenn du dir wegen der Suchmaschine sorgen machst, was zwei verschiedene Varianten für eine Seite angeht, solltest du dir mal Canonical Tag anschauen.
Diesen Tag musst du unbedingt richtig setzen, aber wenn er richtig gesetzt wurde, würde es für Google und co. keinen Unterschied machen, ob sie per /suche/?key=suchbegriff auf das Suchergebnis gekommen sind oder per /suche/suchbegriff, wenn entsprechend in diesem Tag die /suche/suchbegriff Variante der URL steht. Google und co. werden dann nämlich nicht die aktuell aufgerufene Seite indexieren, sondern die in diesem Tag angegebene Seite. Dieser Tag ist für SEO generell sehr wichtig.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
04.04.2017, 19:59 Profil | PM | E-Mail  
Newler
Mitglied
Neuling


Dabei seit: 03.04.2017
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Guten Morgen!

Danke erstmal für deine Hilfe und Ratschläge.

Zitat:
Orginal von DingsDaBums
[...] Ich würde das Ganze aber auch nicht überbewerten. Die Suchmaschine sucht ja nicht mit deinem Formular, also kommt es eher darauf an, was passiert, wenn jemand irgendwo auf ein Suchergebnis deiner Suche mit der Variante "/suche/?key=suchbegriff" verlinkt. Das wird aber nicht wirklich der Fall sein, weil die Weiterleitung wird der Nutzer gar nicht wirklich sehen/spüren und wird dann wenn sowieso die Variante mit /suche/Suchbegriff verwenden. [...]


Aus dem Grund habe ich das nun ein bisschen anders gelöst und hoffe, dass diese Lösung optimal genug ist.

Suchformular:
 Code 
1:
2:
3:
4:
<form class="search" action="/Suche/" method="POST" autocomplete="off">
    <input type="text" name="key" value='' placeholder="Suchbegriff eingeben..">
    <button value="search">Suchen</button>
</form>
Suche.php:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php
if(isset($_POST["key"]) && !empty($_POST["key"])) {
    
$key urlencode($_POST["key"]);
    
header("Location: /Suche/$key/"true301);
    exit;
}

if(isset(
$_GET["key"]) && !empty($_GET["key"])) {
    
$key urldecode($_GET["key"]);
    
// Es wurde ein Suchbegriff übermittelt
} else {
    
// Es wurde kein Suchbegriff übermittelt
}
?>
Liebe Grüße


05.04.2017, 11:45 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » Sonstige Sprachen » .htaccess: Parameter-Umleitung?   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz