如何通过添加显示语言作为子文件夹在htaccess中创建多语言url



对于我在本地拥有的网站,我需要在多语言模式下更新用于设置显示语言的代码片段。

首先,我需要系统来确保url已经用语言键入;如果没有,它将不得不使用默认语言转换url,并将其添加为子文件夹。

最后,系统应该检查选择了哪种显示语言,并自动将其添加到查询中=>&lang=(language)

我试过这个代码,但它不起作用。

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !/(en|de|fr)/ [NC]
RewriteRule (.*) /test/en/$1 [R,L]
RewriteRule ^(en|de|fr)/$ /test/index.php?lang=$1 [L]
RewriteRule ^(en|de|fr)/city/(.+?)$ city.php?url=$2&lang=$1 [NC,L]
RewriteRule ^(en|de|fr)/(.*)$ /test/$1 [L]

服务器端语言中的模式(en|de|fr(始终有效。我不明白为什么它在HTACCESS中不起作用。

已解决

我想我已经解决了。现在,如果我键入local_ip/test/en(没有最后一个斜杠(,系统会正确地将我指向local_ip/test/en/(有最后一个斜线(。

这只是感兴趣的代码。

RewriteCond %{REQUEST_URI} /(en|de|fr)$ [NC]
RewriteRule (.*) /test/%1/ [R,L]
RewriteCond %{REQUEST_URI} !/(en|de|fr)/ [NC]
RewriteRule (.*) /test/en/$1 [R,L]
RewriteRule ^(en|de|fr)/$ /test/index.php?lang=$1 [L]

对于您显示的示例,您可以尝试以下操作吗。将其放在您的根目录中,也请在测试URL之前清除浏览器缓存。

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{HTTPS} off 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{REQUEST_URI} !/(en|de|fr) [NC]
RewriteRule ^(.*)$ /test/en/$1 [R=301,L]
RewriteRule ^(en|de|fr)/?$ /test/index.php?lang=$1 [QSA,NC,L]
RewriteRule ^(en|de|fr)/city/(.+?)/?$ city.php?url=$2&lang=$1 [QSA,NC,L]
RewriteRule ^(en|de|fr)/([^/]*)/?$ /test/$1 [QSA,NC,L]

最新更新