.htaccess 单页301重定向

发布于 2024-08-04 21:06:01 字数 406 浏览 5 评论 0 原文

网站重新设计后,我有几个页面需要重定向。所有内容都保留在同一个域中,只有一些内容被重新组织和/或重命名。它们的形式为:

/contact.php

现在为:

/contact-us.php

使用 .htaccess 文件,我添加了这一行,这是我发现最推荐的一行:

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

这基本上很好 - 它可以完成工作- 问题是,它还重定向:

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

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

After a site redesign, I've got a couple of pages that need to be redirected. Everything is staying on the same domain, just a couple of things have been reorganised and/or renamed. They are of the form:

/contact.php

is now:

/contact-us.php

Using the .htaccess file, I've added this line, which is the one I find recommended most:

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

This is mostly fine - it does the job - the problem is, it also redirects:

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

Is there a way of specifying that I only want to redirect the contact.php in the root?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

尘世孤行 2024-08-11 21:06:01

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

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

RedirectMatch uses a regular expression that is matched against the URL path. And your regular expression /contact.php just means any URL path that contains /contact.php but not just any URL path that is exactly /contact.php. So use the anchors for the start and end of the string (^ and $):

RedirectMatch 301 ^/contact\.php$ /contact-us.php
飘然心甜 2024-08-11 21:06:01

这应该可以做到

RedirectPermanent /contact.php /contact-us.php 

This should do it

RedirectPermanent /contact.php /contact-us.php 
囍孤女 2024-08-11 21:06:01
redirect 301 /contact.php /contact-us.php

使用重定向匹配规则然后必须编写链接以使其完全匹配是没有意义的。如果不包含,则不必排除!只需使用不匹配的重定向,然后正常使用链接

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

There is no point using the redirectmatch rule and then have to write your links so they are exact match. If you don't include you don't have to exclude! Just use redirect without match and then use links normally

你是年少的欢喜 2024-08-11 21:06:01

如果您希望能够进行模板匹配,您还可以使用 RewriteRule和重定向网址。

You could also use a RewriteRule if you wanted the ability to template match and redirect urls.

鸢与 2024-08-11 21:06:01

如果您更喜欢使用最简单的解决方案来解决问题,可以使用RedirectMatch 是更基本的 重定向 指令。

它不使用模式匹配,因此更明确且更易于其他人理解。

<IfModule mod_alias.c>

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

</IfModule>

查询字符串应该被保留,因为文档说:

匹配的 URL 路径之外的其他路径信息将是
附加到目标 URL。

If you prefer to use the simplest possible solution to a problem, an alternative to RedirectMatch is, the more basic, Redirect directive.

It does not use pattern matching and so is more explicit and easier for others to understand.

i.e

<IfModule mod_alias.c>

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

</IfModule>

Query strings should be carried over because the docs say:

Additional path information beyond the matched URL-path will be
appended to the target URL.

半世晨晓 2024-08-11 21:06:01

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

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

It will redirect your store page to your contact page

    <IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteBase /
    Redirect 301 /storepage /contactpage
    </IfModule>
稳稳的幸福 2024-08-11 21:06:01

如果您需要为所有 URL 创建动态重写。
例如,通过 301 重写从 .php 扩展名到 .html,您可以使用以下命令:

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

In case you need to create a dynamic rewrite for all of your URLs.
For example, from .php extension to .html with a 301 rewrite, you can use this:

RewriteCond %{THE_REQUEST} \ /(.+)\.php
RewriteRule ^                                                 /%1.html  [L,R=301]
RewriteRule ^(.*).html$                                       $1.php [QSA]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文