2017-02-21 5 views
0

Quelle règle puis-je ajouter .htaccess qui me donnerait le résultat suivant?htaccess rediriger les sous-répertoires vers le niveau supérieur

un sous-dossier qui incluent "/ fabricant/des symboles" dans l'URL juste récrire au niveau supérieur, par exemple

domain.net/catalog/file/manufacturer/?categorylayout=0&showcategory=1&showproducts=1&productsublayout=0 

à

domain.net/catalog/file/ 

.htaccess

RedirectMatch 301 ^/manufacturer//

ne fonctionnera pas. Il devrait supprimer les paramètres GET de la fin de l'URL, et l'indicateur QSD provoque l'erreur 500.

Répondre

1

Je pense que c'est ce que vous cherchez:

RewriteEngine on 
RewriteRule ^/?(.+)/manufacturer/ /$1/ [R=301,QSD] 

Cela fonctionne dans la configuration hôte des serveurs http ou dans des fichiers de configuration dynamique (.htaccess) si le module de réécriture est chargé.

L'interprétation des fichiers de configuration dynamique doit être activée si vous décidez d'utiliser tel. Dans ce cas, ce fichier doit être placé dans le dossier DocumentRoot de votre serveur http.


Votre description se contredit dans un petit détail: dans la description que vous dites «/fabricant/des symboles », mais l'exemple montre une URL sans ces symboles (notez que les paramètres GET sont pas partie considérée de l'URL). La règle ci-dessus pourrait être légèrement modifiée en fonction de ce que votre exigence précise est ...


Et un soupçon général: vous devez toujours préférer placer ces règles dans la configuration hôte des serveurs http au lieu d'utiliser dynamique fichiers de configuration (".htaccess"). Ces fichiers sont notoirement sujettes aux erreurs, difficiles à déboguer et ils ralentissent vraiment le serveur. Ils sont seulement fournis comme une dernière option pour les situations où vous n'avez pas de contrôle sur la configuration de l'hôte (lisez: fournisseurs de services d'hébergement vraiment bon marché) ou si vous avez une application qui repose sur l'écriture de ses propres règles de réécriture).

+0

QSD - le drapeau provoque 500 erreur de serveur, et RewriteRule^/? (. +)/Manufacturer// $ 1/[R = 301, L] - laissez la chaîne de requête = ((( –

+0

@YuryZheve Vous n'avez pas besoin l'indicateur L pour une redirection externe et le QSD est nécessaire pour supprimer les paramètres GET, puisque QSA est la valeur par défaut (AFAIK) .Ce drapeau est bien documenté, pas la raison pour laquelle il génère une erreur sur votre système – arkascha

+0

https: // httpd .apache.org/docs/trunk/rewrite/flags.html # flag_qsd – arkascha