• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Weiterleiten wenn "?ask=" in Adressleiste ist

ALPHAnumerix

New Member
Hallihallo,
zunächst ein Überblick über das, was ich gerade mache. Ich habe gestern auf meiner Seite ermöglicht, dass man auf ein Dokument per seite.tld/?ask=faq und per seite.tld/faq zugreifen kann. Ich wollte damit die Seite ein wenig schöner machen. Da das aber dann von Google als doppelter Inhalt gezählt wird (da unterschiedliche URL, aber selbes Dokument), wollte ich ein Redirect auf die Kurzversion machen, wenn das Dokument per ?ask=faq aufgerufen wird.

Da es sich hierbei um hunderte Dokumente handelt, mache ich wohl am Besten per RedirectMatch. Und zwar wollte ich alle Anfragen, die "?ask=<string>" beinhalten direkt auf "/<string>" umleiten. Aber ich kriege es einfach nicht gebacken.. Hier die RedirectMatch-Zeilen in meiner .htaccess:

RedirectMatch 301 ^/\?ask\=(.*)$ http://seite.tld/$1

Kann mir da jemand einen Tipp geben? Hat sich da bei mir der Fehlerteufel eingeschlichen? Ich bin für jeden Einfall sehr dankbar!

Liebe Grüße
 
Hast Du ein Log von mod_rewrite? Der Regex ist in Ordnung und matched.

Edit: Ich habe gerade mal gegoogelt. Es liegt - so glaube ich - an dem Aufbau deiner Regel.

Code:
RewriteRule [FONT=Fixedsys]^/\?ask\=(.*)$ http://seite.tld/$1[/FONT] [R=301,L]
Siehe auch hier: http://www.easymodrewrite.com/example-moved

--marneus
 
Last edited by a moderator:
Nee, Logs von mod_rewrite kriege ich leider nicht.

Ja, ich habe schon viele Variationen des regulären Ausdrucks probiert, auch viele, die für gewöhnlich matchen, aber nichts hat funktioniert, als ich sie per .htaccess ausprobiert hatte. Vielleicht hat es auch was mit der RewriteRule zu tun, die ich vorher schon eingebaut habe? Hier ist sie:

RewriteEngine on
RewriteRule ^([^\.\?]+)$ /index.php?ask=$1

Aber danke schonmal für deinen Beitrag. Ich habe es jetzt auch mit deiner Methode versucht und auch davon bereits tausende Variationen ausprobiert, aber leider war davon nichts erfolgreich. Also, so langsam verzweifle ich :) Naja, ich behalt das Thema hier mal im Auge und probier weiter rum.
 
Es schaut nach, ob die GET-Anfrage an den Server ein '.' oder ein '?' beinhaltet (der Punkt für direkte Dateianfragen, das Fragezeichen für GET-Parameter). Wenn dies NICHT der Fall ist, dann zaubert mod_rewrite den Inhalt der Seite, alsob da "?ask=<anfrage>" stünde. Also kann man jetzt die Seite per seite.tld/<anfrage> sowie unter seite.tld/?ask=<anfrage> erreichen.

Das ist halt das, was ich vor paar Tagen bereits gemacht habe. Jetzt wollte ich halt noch eine Regel reinschaufeln, die bewirkt, dass der Nutzer von seite.tld/?ask=<anfrage> automatisch auf seite.tld/<anfrage> weitergeleitet wird. Es gibt auch noch andere GET-Parameter, die nicht weitergeleitet werden sollen, deswegen ist in der mod_rewrite Regel das Fragezeichen wichtig.
 
Okay, ich hab es jetzt auf eine andere Art udn Weise gelöst. Ich habe echt die nase voll von RegEx, außerdem habe ich irgendwo gelesen, dass man .htaccess nur als letzte Lösung verwenden soll. Deswegen hab ich das Problem jetzt per PHP beseitigt. Ich schaue einfach nach, ob "?ask=" im request-String steht, wenn ja, dann schicke ich "manuell" ein 301 zum Dokument, ohne "?ask=":

Code:
function str_in_str($str1, $str2){
	if(strlen($str1)>strlen($str2)){
		$temp=$str1;	//	Tauschen
		$str1=$str2;
		$str2=$temp;
	}
	$y=0;
	for($x=0; $x<strlen($str2); $x++){
		if($str2[$x]==$str1[$y])
			$y++;
		if($y==strlen($str1))
			return TRUE;
	}
	return FALSE;
}

[I][...][/I]

if(str_in_str("?ask=", $_SERVER['REQUEST_URI'])){	//	?ask= weiterleiten
	$location=str_replace("?ask=", "", $_SERVER['REQUEST_URI']);
	if(strlen($location)!=0){
		header('HTTP/1.1 301 Moved Permanently');
		header('Location: '.$location);
	}
}

Ich danke allen, die sich Gedanken dazu gemacht haben, besonders dir, marneus. :) Liebe Grüße
 
Back
Top