php - .htaccess 多语言版本中的许多参数

标签 php .htaccess mod-rewrite seo

这是我的 .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/

相关文章:

php - 如何使用 HTML 5 从 Torrent 流式传输视频?

php - 将 "data-binary"从 cURL 翻译成 PHP

php - 如何将发布数据放入 CodeIgniter 中的数组中?帖子项目是数组

php - 通过 url 保护对文件和文件夹的访问

.htaccess - 如何使用 .htaccess 重写将根 URL 重定向到子目录?

apache - 您如何简单地将新的自定义重写添加到 wordpress 的 .htaccess 中而不会失败?

php - 如何防止页面显示在 iframe 之外

regex - RewriteRule 接受下划线和点

php - .htaccess 中的强制 https 重定向导致/admin 被重定向到/

apache - 托管服务器上的内部 apache 重写问题