Question

J'ai la règle Apache Rewrite suivante

<IfModule rewrite_module>
     RewriteEngine on
     RewriteMap tolowercase int:tolower
     RewriteCond $2 [A-Z] 
     RewriteRule ^(.*)/(.*).html$ $1/${tolowercase:$2}.html [R=301,L]
</IfModule>

qui change ceci:

http://localhost.localdomain.com/FooBarBaz.html

à ceci:

http://localhost.localdomain.com/foobarbaz.html

Je voudrais le porter à cette tuckey.org URL Rewrite Filter .

Qu'est-ce qu'une règle équivalente que je pourrais utiliser pour faire la minuscule URL? Je suis particulièrement intéressé par la façon de former l'élément de condition.

Voici ma première coupe à la règle, mais il ne fonctionne pas, même sans la condition:

<rule>
    <name>Force URL filenames to lower case</name>
    <from>^(.*)/(.*).html$</from>
    <to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
Était-ce utile?

La solution

Voici ce que j'ai finalement installé sur:

<rule match-type="regex">
    <name>Force URL filenames to lower case</name>
    <condition type="request-uri" casesensitive="false" operator="notequal">^.*/a4j.*$</condition>
    <condition type="request-uri" casesensitive="true">^.*/.*[A-Z].*.html$</condition>
    <from>^(.*)/(.*).html$</from>
    <to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>

La première condition est d'éviter que la règle de l'exécution des demandes a4j AJAX.

Autres conseils

Sean,

Vous n'avez pas besoin d'une condition de le faire (à l'exception de l'ignorer les appels AJAX). Plus important encore, l'élément de l'état ne dispose pas d'un casesensitive attribut, seul l'élément de fait. Une fois que je me suis rendu, j'ai pu écrire la règle:

<rule match-type="regex">  
    <note>Force URL to lower case</note>
    <from casesensitive="true">^.*[A-Z].*$</from>
    <to type="permanent-redirect" last="true">${lower:$0}</to>  
</rule>

NOTE: Cela fonctionne pour toute demande de chemin (mais pas la chaîne de requête).

Je suis tombé sur votre poste parce que la règle de filtrage URL Rewrite m'a donné qui ressemblait beaucoup comme la vôtre ne fonctionnait pas. A travers une tonne d'essais et d'erreurs, j'ai finalement trouvé que le problème n'a pas été l'expression régulière du tout. Il était que n'a correspondant mais était pas sensible à la casse, donc je recevais réoriente infinies.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top