.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=]
我需要在迁移时通过 .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=]