这是我的 .htaccess 文件:
AddHandler application/x-httpd-php56 .php
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !lang=(de|en|es|fr|nl|pl|ru|se)
RewriteRule ^$/ [R=301,L]
RewriteRule ^(de|en|es|fr|nl|pl|ru|se)$ $1/ [R=301,L]
RewriteRule ^(de|en|es|fr|nl|pl|ru|se)/(.*)$/ $2?lang=$1&%{query_STRING} [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /index.php?p=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)$ /index.php?p=$1&id=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&g=$2&id=$3 [L]
现在,没有语言子目录的主版本完美运行:
ganted.pl/类别/示例
$_GET 参数
Array ( [p] => category [id] => example )
问题出现在语言版本中:
ganted.pl/en/category/example
$_GET 参数
Array ( [p] => en [g] => category [id] => example )
我怎样才能删除语言代码,而不干扰 $_GET 参数?
ganted.pl/en/category/example 应该通过以下内容:
Array ( [p] => category [g] => example )
最佳答案
未经测试:
更改示例中的最后几行
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&g=$2&id=$3 [L]
到
RewriteRule ^(de|en|es|fr|nl|pl|ru|se)/([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$2&g=$3&id=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&g=$2&id=$3 [L]
是的,只需将第一行添加到最后一行之上。这应该可以解决问题 如果您需要,您可以将我的新行修改为:
RewriteRule ^(de|en|es|fr|nl|pl|ru|se)/([^/]*)/([^/]*)/([^/]*)$ /index.php?lang=$1&p=$2&g=$3&id=$4 [L]
所以你也可以使用语言参数。
也可以随意修改您的其他行;)
关于php - .htaccess 多语言版本中的许多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41041654/