2017-05-25 7 views
1

Ich habe bereits mit PHP-Erweiterung über .htaccess versteckt.Mod_rewrite für die Website übersetzen über htaccess

lang Parameter könnten en oder lt

werden, wenn lang Parameterwert = en als en/ nach Domain, dass hinzufügen sollte:

www.mysite.com/register.php?lang=en ->www.mysite.com/en/register/

Wenn lang Parameterwert = lt als sollte sei so:

www.mysite.com/register.php?lang=lt ->www.mysite.com/register/

Wenn ein anderer Parameter verwendet wird, sollte so sein:

www.mysite.com/etc.php?id=123&param=abc ->www.mysite.com/etc/123/abc/

Mein .htaccess wie folgt aussieht:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

# url is ONLY '/en' or '/lt' -> redirect to /en/ or /lt/ (adding slash) 
RewriteRule ^(en|lt)$ $1/ [R=301,L] 
# now all urls have en/ lt/ -> parse them 
RewriteRule ^(en|lt)/(.*)$ $2?lang=$1&%{query_STRING} [L] 
# no "R=301" here --------------------------------------^ 

RewriteCond %{THE_REQUEST} /+(.*?/)?(?:index)?(.*?)\.php[/\s?] [NC] 
RewriteRule^%1%2/ [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

aber jetzt ist es funktioniert falsch:

Wenn ichhabeEs leitet mich um www.mysite.com/register/?lang=en

Haben Sie irgendwelche Ideen?

+0

Können Sie 'www.mysite.com/etc.php lang = de & id = 123 & param = abc' auch haben? Wenn ja, an welche URL soll es weitergeleitet werden? – anubhava

+0

@anubhava Ja, immer wenn es 'lang = en' gibt, sollte es nach der Domain gehen:' www.mysite.com/de/ ... 'falls du gefragt hast:' www.mysite.com/ de/etc/123/abc/'. – Infinity

+0

Hmm, das macht das Umschreiben wirklich schwierig, weil der erste Teil nach dem Hostnamen manchmal ein Sprachcode oder ein php Dateiname sein kann. Kann es '/ ft /' oder '/ de /' oder '/ it /' auch am Anfang wie '/ de /' in derselben URL geben? – anubhava

Antwort

1

Haben Sie Ihre Wurzel .htaccess wie folgt aus:?

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(lt)\s [NC] 
RewriteRule^%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)\s [NC] 
RewriteRule^%2/%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3/%4? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+\.php)\?lang=lt&(\S*)\s [NC] 
RewriteRule^%1?%2 [L,NE,R=302] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)\s [NC] 
RewriteRule^%1/%2? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%1/%2/%3? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php\s [NC] 
RewriteRule^%1%2/ [R=302,L,NE] 

# url is ONLY '/en' or '/lt' -> redirect to /en/ or /lt/ (adding slash) 
RewriteRule ^(en|lt)$ $1/ [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{QUERY_STRING} !(^|&)lang=(en|lt)(&|$) [NC] 
RewriteRule ^(?!(?:en|lt)/)(.+)$ lt/$1 [DPI,NC] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{DOCUMENT_ROOT}/$2.php !-f 
RewriteRule ^(en|lt)/([\w-]+)/?$ - [L] 

# now all urls have en/ lt/ -> parse them 
RewriteRule ^(en|lt)/([\w-]+)/?$ $2.php?lang=$1 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/?$ $2.php?lang=$1&id=$3 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/([\w-]+)/?$ $2.php?lang=$1&id=$3&param=$4 [L,NC,QSA] 
+0

Als Sie für eine Antwort, aber es hat nicht funktioniert. Wenn ich versuche auf 'www.mysite.lt' zuzugreifen, habe ich einen Fehler bekommen:' Die angeforderte URL/lt/wurde nicht auf diesem Server gefunden. ' – Infinity

+0

Es funktioniert fast, außer mit 'lang = lt'. Wenn ich an die Adresszeile übergebe: 'http: //mysite.lt/register.php? Lang = lt & id = 123456789 & param = abcd' Es wird keine URL in' http: // mysite.lt/register/123456789/abcd' umgewandelt. Aber wenn ich 'lang = en' verwende, funktioniert es normalerweise' http: //mysite.lt/register.php? lang = en & id = 123456789 & param = abcd' konvertiert zu 'http: // mysite.lt/de/register/123456789/abcd', etwas falsch wenn 'lang' Parameter' lt' ist – Infinity

+1

Vielen Dank, sieht gut aus! – Infinity

Verwandte Themen