0

ich dafür in Stack-Überlauf gesucht, aber finde keine relevante Antwort:.htaccess, URL-Rewriting und umleiten 301

Ich habe eine .htaccess-Datei mit diesem:

RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule ^/?(.*) http://www.mywebsite.com/$1 [L,R,NE] 

RewriteRule ^home$ /index.php [L] 
RewriteRule ^home$ /index.php?content=home [L] 
RewriteRule ^accueil$ /index.php?content=home&lang=fr [L] 
RewriteRule ^home$ /index.php?content=home&lang=en [L] 

RewriteRule ^acceuil-message-1$ /index.php?content=home&val=1&lang=fr [L] 
RewriteRule ^home-notice-1$ /index.php?content=home&val=1&lang=en [L] 
RewriteRule ^acceuil-message-2$ /index.php?content=home&val=2&lang=fr [L] 
RewriteRule ^home-notice-2$ /index.php?content=home&val=2&lang=en [L] 

RewriteRule ^news-a-la-une$ /index.php?content=news&mode=featured&lang=fr [L] 
RewriteRule ^featured-news$ /index.php?content=news&mode=featured&lang=en [L] 

RewriteRule ^news-recentes-([0-9]+)$ /index.php?content=news&mode=list&page=$1&lang=fr [L] 
RewriteRule ^latest-news-([0-9]+)$ /index.php?content=news&mode=list&page=$1&lang=en [L] 
... 

Es funktioniert gut.

Aber ich muss eine 301-Umleitung einrichten. Also, ich habe nur alle [L] geändert zu [R = 301, L]

Aber wenn ich dies tun, sind meine URLs wieder wie sie zuvor im Browser waren.

Ich vermute, dass die Umleitung zweimal angewendet wird, was erklären würde, warum ich keine Fehlermeldung habe, während immer noch die alten URLs angezeigt werden, aber ich weiß nicht, wo ich die [R = 301, L ] und wo nicht, um es zum Laufen zu bringen.

Vielen Dank für Ihre Hilfe.

+0

Sie versuchen, Redirect und Rewrite zu mischen. Sie brauchen '301' nicht, wenn Sie nur die URL neu schreiben. Die "lange" URL wird nicht angezeigt. '301' ist nützlich, wenn Sie eine Seite an einen anderen Ort verschieben, aber ich glaube nicht, dass Sie das hier versuchen. – sonique

+0

Danke sonique. Eigentlich möchte ich die URLs umschreiben, aber ich muss auch umleiten, da ich die Google-Suchen nicht mehr auf die vorherigen URLs der Website verweisen muss. Ich lese fast überall, dass die 301-Umleitung der richtige Weg dafür ist. Also, was soll ich tun, damit diese Datei das macht, was ich tun muss? Vielen Dank. –

+0

Also, was ist die vorherige URL? die mit 'index.php? ....' – sonique

Antwort

0

So haben Sie 301 folgend zusätzlich zu den RewriteRules umleiten:

RedirectMatch 301 ^/index.php$ /home [L] 
RedirectMatch 301 ^/index.php?content=home&val=([0-9]+)&lang=fr /acceuil-message-1$ [L] 

PS: Sie haben eine Art in acceuil sollte es sagen accueil

Referenz: https://httpd.apache.org/docs/current/mod/mod_alias.html#redirectmatch

Referenz: http://www.larousse.fr/dictionnaires/francais/accueil/569

+0

Vielen Dank für Ihre Antwort. Ich werde es versuchen und wenn es für mich funktioniert, werde ich zurückkommen und für Ihre Antwort stimmen. –

+0

Abfragezeichenfolge ist kein Teil der Übereinstimmung in Mod-Alias, also wird Ihr zweites Beispiel nicht funktionieren. Auch die [L], lesen Sie die Mod-Alias-Dokumentation: https://httpd.apache.org/docs/current/mod/mod_alias.html#redirectmatch – starkeen