.htaccess语言重定向有一些更改



我知道是duplicate,但我被困在这里,我也尝试过用PHP重写链接URL,但我需要问别人,我是新来的,[实际上无法获得],因为一些事情我无法搜索更多。问题是我得到404错误。。。有人帮忙吗?

# BEGIN
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Folder/
RewriteRule ^index.php$ - [L]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ Folder/en/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ Folder/de/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^fa [NC]
RewriteRule ^$ Folder/nl/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|de|fa)/?$ index.php?lang=$1 [QSA,NC,L]
</IfModule>
# END

建议的解决方案

更好的方法可以是在根文件夹中使用一个单独的脚本来处理所有请求。这是一个可以用例子更好地描述的想法:

  1. www.domain.com/始终显示在浏览器的地址栏中,但在内部转到www.domain.com/lang_handler.php?lang=sv
  2. www.domain.com/page1/始终显示在浏览器的地址栏中,但在内部转到www.domain.com/lang_handler.php?lang=sv&target_page1=page1

这可以在.htaccess with mod_rewrite directives中实现。这里有一个例子:

RewriteEngine On
RewriteBase  /
# Set managed languages here, except default (en)
RewriteCond %{HTTP:Accept-Language} ^(sv|ne|no).*$ [NC]
# Replace the names of the script and the parameters in the next 2 lines
RewriteCond %{REQUEST_URI} !lang_handler.php              [NC]
RewriteRule ^([^/]+)?/?$  lang_handler.php?lang=%1&target_page1=$1  [L,QSA]
# If no match, set English
# Replace the names of the script and the parameters in the next 2 lines
RewriteCond %{REQUEST_URI}  !lang_handler.php             [NC]
RewriteRule ^([^/]+)?/?$  lang_handler.php?lang=en&target_page1=$1  [L,QSA]

最新更新