【问题标题】:How i can stop processing of htaccess?我怎样才能停止处理 htaccess?
【发布时间】:2020-10-26 19:52:48
【问题描述】:

我的 htaccess 中有两个指令。

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

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

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

我试试这个:

RewriteCond %{REQUEST_URI} !^/(it|en|de)/{0,1}(.*)
RewriteRule ^(.*)$ /it/$1 [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}

“/it”这个词正确加在url的开头,而且是无穷大的“lng=it”

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

有什么提示吗?

编辑: 添加我的完整 .htaccess

RewriteEngine On
Options +FollowSymlinks
RewriteBase /

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

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

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

【问题讨论】:

  • 如果客户发送/it/my-page?lng=en,您希望发生什么?
  • @DusanBajic 重定向到:/it/my-page
  • 你在某处有一个循环。错误信息非常清楚。您可以发布完整的 .htaccess 文件吗?指令的顺序很重要。
  • 谢谢。我将完整的 .htaccess 添加到问题中。

标签: regex apache .htaccess apache2.4


【解决方案1】:

请记住,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/$1 [R=301,L,NE]

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

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

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2018-11-25
    • 2011-09-06
    • 2020-06-20
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多