このApacheを書き換えたルールをTuckey UrlrewriteFilterルールに変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3678187

質問

次のApacheの書き換えルールがあります

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

それはこれを変えます:

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

これに:

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

このtuckey.orgに移植したいと思います URLはフィルターを書き直します.

URL小文字を作成するために使用できる同等のルールは何ですか?条件要素を形成する方法に特に興味があります。

これがルールでの私の最初のカットですが、状態がなくても機能しません。

<rule>
    <name>Force URL filenames to lower case</name>
    <from>^(.*)/(.*).html$</from>
    <to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
役に立ちましたか?

解決

これが私が最終的に解決したものです:

<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>

最初の条件は、A4J AJAX要求でルールが実行されないようにすることです。

他のヒント

ショーン、

これを行うために条件は必要ありません(Ajax呼び出しの無視を除く)。さらに重要なことは、条件要素です CaseSensitive属性はありません, 、From Elementのみが行います。これに気付いたら、ルールを次のように書くことができました。

<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>

注:これは、パス要求全体で機能します(ただし、クエリストリングではありません)。

URLがフィルタールールを書き直したので、あなたの投稿を書き直したので、私はあなたの投稿に出くわしました。大量の試行錯誤を通して、私は最終的に問題が正規表現ではないことを発見しました。それはそれでした だった マッチングだったがだった いいえ ケースに敏感なので、私は無限のリダイレクトを取得していました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top