.htaccess 中的 307 重定向是否正确?

307 redirect in .htaccess is this correct?

我需要在迁移时通过 .htaccess 将许多页面临时重定向到旧站点。

我是否只需要为每个 307 重定向添加这一行到 .htaccess

Redirect 307 /page_one https://www.oldsite.com/page_one

我的整个 .htaccess 看起来像这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_URI} !/(wp-content/uploads/.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Redirect 307 /page_one https://www.oldsite.com/page_one
Redirect 307 /page_two https://www.oldsite.com/page_two
</IfModule>

Redirect 307 /page_one https://www.oldsite.com/page_one
Redirect 307 /page_two https://www.oldsite.com/page_two

是的,如果您只想重定向特定页面,您完全可以这样做。

但是,由于这似乎是一个 WordPress 站点,您应该将这些指令放在 # BEGIN WordPress .. # END WordPress 块之外,因为 WP 本身将尝试维护这个指令块并且可能会覆盖您的指令。

这些 mod_alias 指令可以放在 WP 代码块之前或之后 - 这无关紧要。 mod_alias 无论如何都会在 mod_rewrite 之后处理,因此配置文件中指令的顺序并不重要。

但是请注意,Redirect 指令是前缀匹配的,匹配后的所有内容都将复制到目标的末尾。因此,在您的示例中,/page_one/foo 也将被重定向到 https://www.oldsite.com/page_one/foo.

如果目标 URL-path 始终与源 URL-path 相同,那么您可以使用带有反向引用的 mod_alias RedirectMatch 指令来代替保存重复。这使用正则表达式进行匹配,而不是简单的前缀匹配。例如:

RedirectMatch 307 ^/page_three$ https://www.oldsite.com[=11=]

这只会完全匹配 /page_three 并重定向到 https://www.oldsite.com/page_three[=21=] 反向引用是与前面的正则表达式(第二个参数)匹配的整个 URL 路径,即。 /page_three 在这个例子中。

如果您只是重定向 GET 请求,那么 302(临时)就足够了,因此您可以省略状态代码,因为 302 是默认值:

RedirectMatch ^/page_four$ https://www.oldsite.com[=12=]