繁体   English   中英

htaccess RewriteRule - 如何将get参数替换为&

[英]htaccess RewriteRule - how to replace get parameter to &

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

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替换为&lang=en和 append 到最后,我尝试了但仍然无法正常工作。

 RewriteRule ^wedding-venue-details/(.*)$./wedding-venue-details/?seoURL=$1

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

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

例如:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM