htaccess 将单个页面重定向到不带参数的不同域
htaccess Redirect Single Page to Different Domain without Parameters
我有一个包含以下 htaccess 文件的站点:
RewriteCond %{THE_REQUEST} \s/+(.+?)\index.html/?[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?uri= [NC,L,QSA]
我需要将两个页面重定向到不同的域。目前,我将它们设置为使用以下行的 302 重定向:
Redirect 302 /some-url-slug https://example.com/some-new-url-slug
这确实可以重定向到新域,但问题是它将 uri 参数添加到重定向的 url 所以我得到类似的东西:
https://example.com/some-new-url-slug?uri=some-url-slug
我认为将其添加到重写规则上方会解决问题,但事实并非如此。我怎样才能忽略该规则,但只针对 2 个特定页面?
I thought adding it above the rewrite rule would solve it
Redirect
指令属于mod_alias,其他指令为mod_rewrite。无论您将 Redirect
指令放在哪里,它总是会在 mod_rewrite 之后被处理。 Redirect
指令将保留查询字符串。
对于这两个特定的重定向,您需要在文件顶部使用 mod_rewrite RewriteRule
。例如:
RewriteRule ^some-url-slug$ https://example.com/some-new-url-slug [QSD,R=302,L]
注意RewriteRule
指令匹配的URL-path不是以斜杠开头的。 QSD
(查询字符串丢弃)标志确保丢弃初始请求中可能存在的任何查询字符串(否则默认情况下通过)。
更新:
I just realized that adding a trailing / to the url loads the original page. Do I need to create a seperate redirect rule for links that have the trailing slash?
您可以将其包含在同一规则中,并通过在模式末尾添加 /?
使尾部斜杠可选。例如:
RewriteRule ^some-url-slug/?$ https://example.com/some-new-url-slug [QSD,R=302,L]
这现在匹配 some-url-slug
或 some-url-slug/
并像以前一样重定向到 URL。
我有一个包含以下 htaccess 文件的站点:
RewriteCond %{THE_REQUEST} \s/+(.+?)\index.html/?[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?uri= [NC,L,QSA]
我需要将两个页面重定向到不同的域。目前,我将它们设置为使用以下行的 302 重定向:
Redirect 302 /some-url-slug https://example.com/some-new-url-slug
这确实可以重定向到新域,但问题是它将 uri 参数添加到重定向的 url 所以我得到类似的东西:
https://example.com/some-new-url-slug?uri=some-url-slug
我认为将其添加到重写规则上方会解决问题,但事实并非如此。我怎样才能忽略该规则,但只针对 2 个特定页面?
I thought adding it above the rewrite rule would solve it
Redirect
指令属于mod_alias,其他指令为mod_rewrite。无论您将 Redirect
指令放在哪里,它总是会在 mod_rewrite 之后被处理。 Redirect
指令将保留查询字符串。
对于这两个特定的重定向,您需要在文件顶部使用 mod_rewrite RewriteRule
。例如:
RewriteRule ^some-url-slug$ https://example.com/some-new-url-slug [QSD,R=302,L]
注意RewriteRule
指令匹配的URL-path不是以斜杠开头的。 QSD
(查询字符串丢弃)标志确保丢弃初始请求中可能存在的任何查询字符串(否则默认情况下通过)。
更新:
I just realized that adding a trailing / to the url loads the original page. Do I need to create a seperate redirect rule for links that have the trailing slash?
您可以将其包含在同一规则中,并通过在模式末尾添加 /?
使尾部斜杠可选。例如:
RewriteRule ^some-url-slug/?$ https://example.com/some-new-url-slug [QSD,R=302,L]
这现在匹配 some-url-slug
或 some-url-slug/
并像以前一样重定向到 URL。