2017-05-10 4 views
1

Ich habe die folgende Art von URLs,Rewrite Bedingung für die Lokalisierung

foo.com/en-us/ 
foo.com/fr-fr/ 

Die URLS auch sein kann:

foo.com/en-us/index.html 
foo.com/en-us/anything/anything/index.html 

Ich würde neu schreiben möchten und umleiten Versionen wie in Kleinbuchstaben:

foo.com/en-US/ 
to 
foo.com/en-us/ 

oder

foo.com/en-Us/ 
to 
foo.com/en-us/ 

oder

foo.com/EN-us/ 
to 
foo.com/en-us/ 

Ich habe versucht, Variationen folgenden aber kein Glück.

^.*\/[A-Z]{2}-[A-Z]{2}\/.* doens't Abdeckung diese Fälle

es tut Cover: foo.com/EN-US/index.html

Was wäre für diesen Fall die Rewrite-Zustand und die Regel sein?

Antwort

2

können Sie diese RewriteMap und Rewrite-Regel verwenden, um zu umleiten /<lang>-<country> URLs in Kleinbuchstaben:

# RewriteMap to convert any string to lowercase 
# This cannot be used in .htaccess 
RewriteMap lc int:tolower 

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^/[a-z-]*[A-Z] 
RewriteRule ^/?([a-z]{2}-[a-z]{2})(/.*)?$ /${lc:$1}$2 [L,NC,R=301,NE] 

Hier RewriteCond %{REQUEST_URI} ^/[a-z-]*[A-Z] verwendet wird, mindestens ein Großbuchstabe in dem ersten Teil zu gewährleisten ist.

+0

Wie kann ich es allgemeiner machen, 'fr-fr',' it-it' oder irgendein Land einzuschließen? – DarthVader

+0

Überprüfen Sie meine aktualisierte Antwort. Um es völlig generisch zu machen, müssen Sie 'RewriteMap' verwenden. Dazu müssen Sie Zugriff auf die Apache-Server-Konfiguration haben. Haben Sie es? – anubhava

+0

Ja, ich habe Zugang zu httpd.conf. – DarthVader

0

Sie sollten Kleinbuchstaben in Ihre Regex aufnehmen. Versuchen Sie, dies als Regex zu verwenden:

^.*\/[a-zA-Z]{2}-[a-zA-Z]{2}+.* 
Verwandte Themen