我有一个以下形式的 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
RewriteCond %{THE_REQUEST} /([^/]*)/([^/]*)/([0-9a-zA-Z]*)\.htm?(.*)cid=([0-9a-zA-Z]{8})
RewriteRule ^ /%1/%2/%3-%5.htm [R=301,L,QSA]
不相关的模组请关闭