2016-05-15 3 views
1

ルール:,-%252C+が含まれており、+%252C+が付属している場合にのみ-から+をリダイレクトするすべてのURLをリダイレクトします。htaccessの301の場合、URL内の任意の場所にある特殊文字を別の文字にリダイレクトしますか?

e.g1:http://www.example.com/FortWorth%252C+TX/ へ:http://www.example.com/FortWorth,-TX/

e.g2:http://www.example.com/Fort+Worth%252C+TX/ へ:http://www.example.com/Fort-Worth,-TX/

e.g3:http://www.example.com/Fort+Worth/ へ:http://www.example.com/Fort+Worth/ (これをリダイレクトするべきではありません)

注:あなたのコードは、上記のURLだけでなく、上記のルールを持つすべてのURLに対して使用するようにしてください。

+1

奇妙な二重エンコードされたURLはそれ... – Sumurai8

+0

真、任意のアイデア私の友人? – Smith

答えて

2

おかげSumurai8、あなたの解決のため、それはこのコードのように変更する必要があります

RewriteEngine On 

RewriteRule ^([^+]+)\+(.+)%2C+\+(.*)$ /$1-$2,-$3 [R,L] 
RewriteRule ^([^+]+)%2C+\+(.*)$ /$1,-$2 [R,L] 
+0

あなたはちょうど編集を提案することができます。私はなぜCの後ろに余分な '+'を含めたのか不明です。 OPのコードは、URLに「C」を1つだけ表示します。 – Sumurai8

2

RewriteRuleの最初の引数は%復号化されたURLと照合されるため、http://www.example.com/FortWorth%252C+TX/ではなくhttp://www.example.com/FortWorth%2C+TX/と一致する必要があります。

奇妙な部分文字列が1回だけ発生し、その前に "+"が1回だけ出現すると仮定すると、次の2つの規則で行うことができます。複数の+が発生した場合、より多くのルールを追加するか、再帰的に処理する必要があるため、事態は素早く醜くなり始めます。

RewriteRule ^([^+]+)\+(.+)%2C\+(.*)$ $1-$2,-$3 [R,L] 
RewriteRule ^([^+]+)%2C\+(.*)$ $1,-$2 [R,L] 

私はmod_rewriteのは、「特殊文字」として,文字をエスケープするかどうかわかりません。これは、URLで使用するのに有効な文字です。問題がある場合は、[NE]フラグを使用して、そのような文字をエスケープしないようにすることができます。

+0

申し訳ありませんが私の友人、私はあなたに親指を与えることができます、あなたのコードはルートにリダイレクト/ – Smith

関連する問題