【问题标题】:.htaccess url routing weird behaviour.htaccess url 路由奇怪的行为
【发布时间】:2020-11-06 11:10:45
【问题描述】:

我的 .htaccess 中有这个:

RewriteRule ^en/?(.*)$ $1?lang=en [QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ page.php?route=$1 [NC,L,QSA]

任务是获取语言参数。如果是https://example.com/,那么语言将是默认的(hu),但如果是https://example.com/en/,那么显然是en。这部分工作正常。 但是,在 page.php 上,如果 url 具有 en/(或 de/、fr/ 等)前缀,则路由变量会重复,例如:

//https://example.com/en/air-conditioners
$_GET['route'] = 'air-conditioners/air-conditioners'; //❌
$_GET['lang'] = 'en'; //✔

//https://example.com/en/air-conditioners/
$_GET['route'] = 'air-conditioners//air-conditioners/'; //❌
$_GET['lang'] = 'en'; //✔

我不是最伟大的正则表达式专家,因此非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: php regex apache .htaccess


    【解决方案1】:

    我解决了这个问题,经过太多小时的研究,基本上我不得不给第一条规则一个 DPI 标志。 (在我的情况下也不需要 QSA) 像这样:

    RewriteRule ^en/?(.*)$ $1?lang=en [NC,DPI]
    

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2017-09-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多