.htaccess 301单个页面重定向

l5tcr1uw  于 2022-11-16  发布在  其他
关注(0)|答案(7)|浏览(176)

网站重新设计后,我有几个页面需要重定向。所有内容都在同一个域中,只有几个内容被重新组织和/或重命名。它们的形式如下:
/contact.php
现在是:
/contact-us.php
使用.htaccess文件,我添加了下面这一行,这是我觉得最值得推荐的一行:

RedirectMatch 301 /contact.php /contact-us.php

这基本上没什么问题--它完成了任务--问题是,它还重定向了:

  • /team1/contact.php
  • /non-existant-folder/contact.php

有没有办法指定我只想重定向根目录中的contact.php?

iswrvxsc

iswrvxsc1#

RedirectMatch使用与URL路径匹配的正则表达式。正则表达式/contact.php仅表示 * 任何包含/contact.php的URL路径 ,而不表示 * 任何完全为/contact.php 的URL路径。因此,请使用锚点作为字符串的开头和结尾(^$)

RedirectMatch 301 ^/contact\.php$ /contact-us.php
avkwfej4

avkwfej42#

这个应该可以了

RedirectPermanent /contact.php /contact-us.php
gcuhipw9

gcuhipw93#

redirect 301 /contact.php /contact-us.php

使用redirectmatch规则是没有意义的,然后必须写你的链接,所以他们是完全匹配的。如果你不包括你不必排除!只是使用redirect没有匹配,然后正常使用链接

cbwuti44

cbwuti444#

如果你想要模板匹配和重定向url的能力,你也可以使用RewriteRule

iaqfqrcu

iaqfqrcu5#

如果您更喜欢使用simplest possible solution来解决问题,RedirectMatch的替代方法是更基本的Redirect指令。
它不使用模式匹配,因此更明确,更容易让其他人理解。

<IfModule mod_alias.c>

#Repoint old contact page to new contact page:
Redirect 301 /contact.php http://example.com/contact-us.php

</IfModule>

查询字符串应继续使用,因为文档说明:
匹配的URL-path之外的其他路径信息将附加到目标URL。

ct3nt3jp

ct3nt3jp6#

它会将您的商店页面重定向到您的联系页面

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteBase /
    Redirect 301 /storepage /contactpage
    </IfModule>
h22fl7wq

h22fl7wq7#

如果你需要为所有的URL创建一个动态重写,例如,从.php扩展名到.html的301重写,你可以使用这个:

RewriteCond %{THE_REQUEST} \ /(.+)\.php
RewriteRule ^                                                 /%1.html  [L,R=301]
RewriteRule ^(.*).html$                                       $1.php [QSA]

相关问题