0

我需要重定向http://site.com/language/arg1/arg2http://site.com/language/mainpage/explore/arg1/arg2

我对 .htaccess 没有丰富的经验,所以我遇到了问题。

RewriteEngine On
RewriteCond %{HTTP_HOST} site.com$ [NC]
RewriteCond %{HTTP_HOST} !mainpage$
RewriteRule ^(.*)$ http://site.com/???/mainpage/explore/$1 [R=301,L]

第一个问题:结果是许多重定向(310 ERR_TOO_MANY_REDIRECTS)。我猜,错误RewriteCond %{HTTP_HOST} !mainpage$

第二个问题:“语言”部分可能有几个变体(“ru”、“en”等)。我必须写什么而不是“???” 在第四行?

4

2 回答 2

1

未经测试,但这应该是您要搜索的内容:

RewriteEngine On
RewriteCond %{HTTP_HOST} site.com$ [NC]
RewriteCond %{REQUEST_URI} !/mainpage/
RewriteRule ^([A-Za-z]+)/(.*)$ http://site.com/$1/mainpage/explore/$2 [R=301,L]
  • 将您的第二个更改{HTTP_HOST}{REQUEST_URI}mainpage不在您的主机名中)
  • $从您的第二个条件中删除(不在mainpage您的 uri 末尾)
  • 使用两个捕获组,一个用于语言,第二个用于参数
  • 限制语言:只允许一个或多个字母([A-Za-z]+)

注意:您的代码仅适用于site.com,不适用于www.site.com

于 2013-07-10T15:34:03.203 回答
1

routes.php您也可以通过 CI 路由来执行此操作

$route['language/(:any)/(:any)']    = "language/mainpage/explore/$1/$2";

在 .htaccess

RewriteEngine on
RewriteRule ^language/([^//]+)/([^//]+)$ language/mainpage/explore/$1/$2 [QSA,L]
于 2013-07-10T15:39:33.257 回答