如何使用.htaccess重定向我的网站

时间:2013-07-10 15:24:49

标签: codeigniter .htaccess

我需要将http://site.com/language/arg1/arg2重定向到http://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”等)。我必须写什么而不是“???”在第四行?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]