Plusieurs RewriteRules pour unique RewriteCond dans .htaccess
J'ai commande suivante dans mon .htaccess
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
%2 n'est pas de travail dans la deuxième et plus tard les lignes.
Puis-je définir une variable pour %2 et de l'utiliser dans toutes les règles de réécriture des commandes?
Commande suivante fonctionne
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
Mais je veux utiliser %2 pour de multiples règle ligne sans dupliquer l'état.
- vous pouvez afficher les 4 astuces citées ici, stackoverflow.com/a/24276207/5064633
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la règle de réécriture drapeau
S|skip
à cravate multiples RewriteRules à une seule Condition (ou à un ensemble de RewriteConds). Voici un exemple qui s'applique un Cond à trois Règles:Pour changer un Cond de travailler pour plusieurs Règles que vous avez à:
Changer la logique de l'ANDs dans le Conds de la Sro et vice versa.
S'il vous plaît être conscient qu'il n'est pas possible d'utiliser toutes les références arrières qui pointent vers le RewriteCond (comme %1) dans le sauté de Règles. Ces ne sont accessibles que dans le saut RewriteRule.
RewriteCond
techniquement toujours ne s'applique qu'à la premièreRewriteRule
. La question d'origine n'a besoin de références arrières.S
paramètre?<If>
mais je suis sur Apache 2.2 pour le moment.La variable doit être enregistré comme un Apache var, alors que peut être utilisé sans avoir à répéter conditions.
De l'épargne dans Apache variables sont indiquées dans la deuxième ligne. L'utilisation de sauvé vars dans les 3ème et 4ème lignes.
Clairement, ce n'est pas beaucoup de plaisir, surtout que les choses se développent et deviennent plus complexes. Cependant, il est moins bien connu de l'option de la règle qui la déclaration, qui indique à apache de passer par le prochain N certain nombre de règles de réécriture de l'instruction. [S=N]. Donc, au lieu de vérifier à chaque fois si la demande n'est PAS un fichier ET n'est PAS un répertoire, on peut faire ceci:
Bloc de Code
#
J'ai trouvé ceci, à partir de: http://www.sant-media.co.uk/2010/03/applying-rewritecond-to-multiple-rewriterule-in-htaccess/
Je pense qu'il utilse
En général, vous ne pouvez pas utiliser plusieurs RewriteRule consolidés à la suite d'un seul RewriteCond. Mais vous pouvez faire un petit truc pour vos conditions si vous le souhaitez, comme on le voit dans:
https://serverfault.com/questions/162586/one-rewritecond-for-multiple-rewriterules
ou
http://www.sant-media.co.uk/2010/03/applying-rewritecond-to-multiple-rewriterule-in-htaccess/
De Apache 2.4, vous pouvez utiliser le
<If>
directive:http://httpd.apache.org/docs/2.4/expr.html#examples