如何使用HTACCESS文件进行301重定向到子页面?

时间:2018-02-05 作者:aslamdoctor

我有2个URL。基本页面和子页面如下。

  • http://example.com/services
  • http://example.com/services/service-1
我想在中添加301重定向规则.htaccess 文件,以便有人打开页面时:

http://example.com/services
它应重定向到其子页:

http://example.com/services/service-1
我尝试在中创建规则.htaccess 但它将作为其子页进入重定向循环。下面是我的代码.htaccess 文件:

Redirect 301 /services /services/service-1
更新:下面是整个htaccess文件代码

RewriteRule ^for-patients$ /for-patients/children [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

Redirect 301 /services /services/service-1
这会导致重定向循环,因为mod\\u别名Redirect 指令是前缀匹配的。那么,源路径/services 匹配重定向路径/services/services-1, 等等等等等等。

但是,由于您已经在使用mod\\u rewrite(作为WordPress的一部分),因此还应该使用mod\\u rewrite(而不是mod\\u alias)执行此重定向。在请求过程中,不同的模块在不同的时间执行(mod\\u rewrite before mod\\u alias),尽管.htaccess, 因此,这可能会导致一些意外的冲突。

因此,请在现有WordPress前端控制器(即# BEGIN WordPress 注释):

RewriteRule ^services$ /services/service-1 [R=302,L]
这与URL匹配/services 只有注意,上没有斜杠前缀RewriteRule 图案在中使用时.htaccess.

这是一个临时(302)重定向。如果这是永久性的,请将其更改为301,但必须在确认其正常工作后。(默认情况下,浏览器会硬缓存301s,因此可能会导致测试出现问题。)

UPDATE: 要使上述内容在请求的URL末尾使用(或不使用)尾随斜杠,请将上述内容更改为:

RewriteRule ^services/?$ /services/service-1 [R=302,L]
如果您的目标URL也应该有一个尾随斜杠,则将其附加到替换上。ie。/services/service-1, 否则,WordPress将发出另一个重定向,或者您可能会创建重复的内容问题。

结束