【问题标题】:htaccess RewriteRule - how to replace get parameter to &htaccess RewriteRule - 如何将get参数替换为&
【发布时间】:2022-01-25 10:01:12
【问题描述】:

我知道这里有很多关于 RewriteRule 正则表达式问题的帖子,但我的一个是不同的。 我按照本教程 (https://www.visualscope.com/seo-friendly-urls.html) 制作了一个对 seo 友好的 url,它可以工作,除非用户更改语言。

网址(可行):

/wedding-venue-details/abc-hotel/ -> /wedding-venue-details/?seoURL=abc-hotel

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^wedding-venue-details/(.*)$ ./wedding-venue-details/?seoURL=$1
</IfModule>

但如果用户尝试更改此页面中的语言,则 URL 将变为:

/wedding-venue-details/abc-hotel/?lang=en

我只是不知道如何将?lang=en 替换为&amp;lang=en 并附加到末尾,我尝试了但仍然无法正常工作。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:
    RewriteRule ^wedding-venue-details/(.*)$ ./wedding-venue-details/?seoURL=$1
    

    您需要使用QSA(查询字符串追加)标志将lang=en 参数追加到重写 URL 上查询字符串的末尾。 Apache 然后处理 URL 参数的合并并正确格式化查询字符串。

    您还缺少L 标志(如果您添加更多指令,这一点很重要)。

    例如:

    RewriteRule ^wedding-venue-details/(.*) wedding-venue-details/?seoURL=$1 [QSA,L]
    

    您应该从 substitution 字符串中删除 ./ 前缀(它在这里没有位置 - get 稍后会被解决)。

    这会将/wedding-venue-details/abc-hotel/?lang=en 重写为/wedding-venue-details/?seoURL=abc-hotel/&amp;lang=en。请注意,尽管您的示例另有说明,但这会将尾部斜杠复制到 seoURL 参数值。


    补充:

    虽然/wedding-venue-details/?seoURL=abc-hotel/ 严格来说不是一个有效的端点。这仍然依赖于其他 Apache 模块/指令将请求路由到文件(或“前端控制器”),例如。 index.html(或index.php)实际处理请求。例如,这应该是/wedding-venue-details/index.html?seoURL=abc-hotel/(如果使用 PHP,则应该是 /wedding-venue-details/index.php?seoURL=abc-hotel/)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多