.htaccess 如何将不带查询字符串的URL 301为带查询字符串的其他URL

zpgglvta  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(95)

这对于SEO来说并不理想--但我别无选择:
我试图重定向50个网址,一个为我们每个美国,像这样,从:

http://www.example.com/411/states/Alabama.html

https://example.com/wp/myfolder?search_field=state&value=AL

除了转发到不同的URL之外,我还需要完成三件事:
1.添加查询字符串
1.强制使用https,而不管原始URL中是否包含httpshttp
1.访问者是否进入“www”并不重要。
有很多在线例子显示了相反的结果(带查询的URL〉不带查询的URL)--但我找不到一个这样的例子。
我试过很多种组合,最近的是:

RewriteCond %{HTTP_HOST} ^\.mydomain\.com$
RewriteRule ^411/states/Alabama\.html$ https://example.com/wp/myfolder\?search_field=state&value=AL [L,R=301]
vtwuwzda

vtwuwzda1#

如果你也有同样的问题,以下是对我有效的方法:

RewriteCond %{REQUEST_URI}  ^/411/states/Arkansas\.html$
RewriteRule ^(.*)$ https://example.com/wp/file-name?search_field=state&value=AR [R=301,L]
0yycz8jy

0yycz8jy2#

RewriteCond %{HTTP_HOST} ^\.mydomain\.com$
RewriteRule ^411/states/Alabama\.html$ https://example.com/wp/myfolder\?search_field=state&value=AL [L,R=301]

这基本上是正确的,你只需要删除RewriteCond指令(它永远不会匹配,但似乎无论如何也不需要)。* substitution * 字符串中的文字?不需要反斜杠转义(但这也不是问题)。
从没有查询字符串的URL(或您不关心查询字符串的URL)重定向到具有查询字符串的URL时,不需要特殊处理。只需按所写的那样声明目标URL。
然而,对于重定向所有50个状态的这个特定问题...您可以改为仅使用单个规则并使用50个条件(RewriteCond指令),每个条件用于一个状态,以 * 查找 *"状态代码."这将有助于避免重复并且将更有效,因为只有一个规则要处理,而不是50个.
(我假设URL的411部分只是一个任意的数字代码,每个URL都不同,成功匹配不需要它。)
例如:

RewriteCond $1/AL ^Alabama/(..) [OR]
RewriteCond $1/AK ^Alaska/(..) [OR]
RewriteCond $1/AZ ^Arizona/(..) [OR]
RewriteCond $1/AR ^Arkansas/(..) [OR]
RewriteCond $1/CA ^California/(..) [OR]
: etc.
RewriteCond $1/WA ^Washington/(..) [OR]
RewriteCond $1/WV ^West-Virginia/(..) [OR]
RewriteCond $1/WI ^Wisconsin/(..) [OR]
RewriteCond $1/WY ^Wyoming/(..)
RewriteRule ^\d+/states/([\w-]+)\.html$ https://example.com/wp/file-name?search-field=state&value=%1 [R=301,L]

$1反向引用包含从URL路径捕获的"状态名称"。* CondPattern * 中的(..)从 * TestString * 捕获相应的2个字符"状态代码"。
%1反向引用包含匹配的"state code"。具体来说,它包含最后一个匹配的 * CondPattern * 中的第一个捕获的组。所有的 * conditions * 都是OR'd;只有一个可以匹配。
请注意,最后一个 * condition *(RewriteCond指令)没有OR标志。
(This不会专门检查空查询字符串,因为这似乎没有必要。)

相关问题