web-dev-qa-db-fra.com

Comment faire correspondre une partie seulement de l'URL et rediriger l'URL avec les paramètres dans .htaccess?

J'ai un certain nombre de liens avec une structure similaire:

example.com/index.php/path/some-path/some-subpath?parameter=1

Ce que je veux rediriger juste à example.com/category/

Mais je veux faire correspondre uniquement le chemin URL, c'est-à-dire. /index.php/path/some-path/some-subpath, car le paramètre de requête n'est pas pertinent.

J'ai essayé la règle suivante:

RewriteRule ^/index.php/path/some-path/some-subpath?parameter=\dd\? /category/ [L,R=301]
1
Alan Kis

Si la chaîne de requête n'est pas pertinente, elle peut simplement être ignorée. (De toute façon, vous ne pouvez pas faire correspondre la chaîne de requête à la directive RewriteRule.)

Essayez ce qui suit dans votre fichier .htaccess racine pour rediriger la requête:

RewriteEngine On
RewriteRule ^index.php/path/some-path/some-subpath$ /category/? [L,R=301]

Dans les fichiers .htaccess par répertoire, le chemin d'URL correspondant à RewriteRulemodèle a le préfixe de répertoire supprimé. En d'autres termes, il ne commence pas par une barre oblique, ^index.php.... au lieu de ^/index.php.....

Le ? à la fin de la substitution RewriteRule est requis pour supprimer la chaîne de requête (le cas échéant) de la demande. Sinon, parameter=1 sera transmis et ajouté à l'URL cible.

Cela correspondra à n'importe lequel chaîne de requête, y compris une chaîne vide.

2
MrWhite

Répondre par @MrWhite n'a pas fonctionné pour moi. Voici ce qui fonctionne avec mon site Wordpress.

Exemple:

OLD URL: http://website.com/xxx/yyy/picture.png
NEW URL: http://website.com/wp-content/picture.png

Donc, je veux remplacer / xxx/yyy / par le chemin normal / wp-content / de WordPress.

Mettez ceci dans votre fichier .htaccess.

RewriteEngine on
RedirectMatch 301 /xxx/yyy/(.*) http://website.com/wp-content/$1
0
xlimit91