使用.htaccess在多个RewriteCond中反向引用变量

问题描述 投票:0回答:1

我有一个以下形式的 URL:
https://example.com/subfolder1/subfolder2/page1.htm?cid=1234abcd

subfolder1 和 subfolder2 以及 page1 都可以有多个值。 URL 可以仅包含 cid 查询参数、更多查询参数或根本没有。如果 URL 有更多查询参数,则必须保留这些参数。

如何将此 URL 更改为 .htaccess 中的以下内容?
https://example.com/subfolder1/subfolder2/page1-1234abcd.htm?cid=1234abcd

如果参数已存在于 URL 中,则不应重写 URL。这可以通过是否存在连字符、后跟 8 个字母数字字符、然后是 .htm 来验证。 重写的 URL 应在 URL 栏中可见,并且应允许处理进一步的规则。

我尝试了以下方法,但我似乎无法在RewriteRule中写入变量:

RewriteEngine On RewriteCond %{QUERY_STRING} (^|&)cid=([0-9a-zA-Z]*)(&|$) RewriteCond %{REQUEST_URI} !\-([0-9a-zA-Z]{8})\.htm RewriteCond %{REQUEST_URI} /([^/]*)/([^/]*)/([0-9a-zA-Z]*)\.htm RewriteRule ^ /%1/%2/%3-%5.htm [R=301,L,QSA]

所有引用的变量均未显示在 URL 中。我知道 % 变量仅引用最后一个 RewriteCond 所以我尝试在第一个 RewriteCond 之后使用 RewriteRule ^ - [E=cid:%2] 然后使用 %{ENV:cid} 而不是 %5,但它仍然没有工作。

这是我看到的:

https://example.com///-.htm?cid=1234abcd

对我做错了什么有什么想法吗?

.htaccess
1个回答
0
投票

RewriteCond %{THE_REQUEST} /([^/]*)/([^/]*)/([0-9a-zA-Z]*)\.htm?(.*)cid=([0-9a-zA-Z]{8}) RewriteRule ^ /%1/%2/%3-%5.htm [R=301,L,QSA]

不相关的模组请关闭

© www.soinside.com 2019 - 2024. All rights reserved.