我如何停止处理 htaccess?

How i can stop processing of htaccess?

我的 htaccess 中有两个指令。

RewriteRule ^(it|en|de)/(.*) ?lng= [L,QSA]

这意味着:对于所有以它开头的 url,en,将 url 变量“lng”设置为 $lang

现在,我希望将所有未以语言代码开头的页面重定向到 /it:

我试试这个:

RewriteCond %{REQUEST_URI} !^/(it|en|de)/{0,1}(.*)
RewriteRule ^(.*)$ /it/ [R=301,L]

但是当我打电话时:

http://HOST/my-page

在 url,我得到了一个“ERR_TOO_MANY_REDIRECTS”:

http://HOST/it/my-page?lng=it&lng=it&{many-others-lng=it}

url开头正确添加了单词“/it”,还有无穷大“lng=it”

我使用“L”标志:这应该停止处理规则集。

有什么提示吗?

编辑: 添加我的完整 .htaccess

RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteRule ^(it|en|de)/(.*) ?lng= [L,QSA]

RewriteRule ^catalogue-men$ views/main/pages/index.cfm?gen=1 [QSA,L]

RewriteCond %{REQUEST_URI} !^/it/
RewriteRule ^(.*)$ /it/ [R=301,L]

请记住 mod_rewrite 循环运行,直到没有规则触发。您正在获得重定向循环,因为第一条规则是从 URI 的开头删除 /it/,而 301 规则是在前面添加它。

  1. 重新排序您的规则
  2. 使用 THE_REQUEST 代替 REQUEST_URI
  3. 在您的跳过条件中添加/catalogue-men

这个 .htaccess 应该适合你:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} !\s/+(?:it|catalogue-men)/ [NC]
RewriteRule ^(.*)$ /it/ [R=301,L,NE]

RewriteRule ^(it|en|de)/(.*) ?lng= [L,QSA]

RewriteRule ^catalogue-men$ views/main/pages/index.cfm?gen=1 [QSA,NC,L]