【问题标题】:Mod rewrite rule for optional language in URLURL中可选语言的Mod重写规则
【发布时间】:2021-07-06 20:15:51
【问题描述】:

我有一个这样的商店网址

https://domain.eu/cz/lp/9200

我正在尝试在 .htaccess 中将其重写为 https://domain.eu/lp/index.php?id=$2&lang=$1

我真的很接近

RewriteRule ^/?(hr|sk|pl|cz|ro|it)/lp/(\d+)?$ /lp/index.php?id=$2&lang=$1

这行得通,但是当 URL 中没有语言时,我似乎找不到处理这种情况的方法。

所以这也是有效的:https://domain.eu/lp/9200 但在这种情况下,我希望 $1 为空(或者当它不存在时具有默认值)

我知道“?”表示“一或零”次,这就是我尝试的原因

RewriteRule ^/?[(hr|sk|pl|cz|ro|it)?]/lp/(\d+)?$ /lp/index.php?id=$2&lang=$1

但它没有按预期工作。任何正确方向的观点都会受到赞赏。

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    用你展示的样本,尝试;请以下列方式保存您的 htaccess 规则文件。确保在测试 URL 之前清除浏览器缓存。

    RewriteEngine ON
    ##Rewrite rule for uris which have only 1 parameter.
    RewriteRule ^lp/(\d+)/?$ /lp/index.php?id=$1 [NC,L]
    ##Rewrite rule for uris which 2 parameters.
    RewriteRule ^(hr|sk|pl|cz|ro|it)/lp/(\d+)/?$ /lp/index.php?id=$2&lang=$1 [NC,L]
    


    使用以下解决方案,以防您尝试访问的 uri 不存在。确保一次只使用第一种解决方案或这个解决方案。

    RewriteEngine ON
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^lp/(\d+)/?$ /lp/index.php?id=$1 [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(hr|sk|pl|cz|ro|it)/lp/(\d+)/?$ /lp/index.php?id=$2&lang=$1 [NC,L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-13
      • 2012-05-13
      • 2012-06-14
      • 1970-01-01
      • 2015-10-15
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多