繁体   English   中英

.htaccess 重定向基于 URL 的一部分

[英].htaccess redirect based on a part of URL

站点崩溃后,重定向 php 脚本无法按预期工作。 我们试图修复它,但与此同时,我们正在寻找一种快速的解决方案来重定向搜索引擎结果,以便我们的访问者至少可以在点击相关的 web 页面后访问。

url 结构或搜索引擎结果是这样的:

https://www.example.com/MainCategory/SubCategory_1/SubCategory_2/Product?page=1

我想使用 URL 的“SubCategory_2”部分重定向到这样的东西

https://www.example.com/SubCategory_2.php

所以在我们完全修复脚本之前,至少我们的访问者会看到一个相对的 web 页面。

我很困惑......有什么想法吗? 谢谢

要重定向所述 URL,其中所有部分都是可变的(包括完全可变的,但存在查询字符串),那么您可以使用根.htaccess文件顶部附近的 mod_rewrite 执行类似以下操作(或者至关重要的是,在任何现有的内部重写之前) :

RewriteEngine On

RewriteCond %{QUERY_STRING} .
RewriteRule ^[^/]+/[^/]+/([^/]+)/[^/]+$ /$1.php [QSD,R=302,L]

QSD标志是从重定向响应中丢弃原始查询字符串所必需的。

以上将重定向:

  • /MainCategory/SubCategory_1/SubCategory_2/Product?page=1/SubCategory_2.php
  • /foo/bar/baz/qux?something to /baz.php

您可以使用此 htaccess 测试器在此处对其进行测试


更新:

不幸的是没有成功。 我收到 404 错误。

如果指令与请求的 URL 或/SubCategory_2.php不存在不匹配,您将获得 404。

URL 是否被重定向? 您在浏览器的地址栏中看到了什么?

如果没有重定向,则上述规则与请求的 URL 不匹配,并且该规则什么也不做。 要么是因为:

  • URL 格式与问题中所述不同。
  • 该规则位于.htaccess文件中的错误位置。 如前所述,此规则需要靠近配置文件的顶部。

如果 URL 包含某个字符串,我在这里找到了一个基本解决方案 htaccess 重定向,我创建了类似这样的RewriteRule ^(.*)SubCategory_2(.*)$ https://example.com/SubCategory_2.php[L,R=301]和工作得很好。 我的问题是这是一个“静态解决方案”,因为“SubCategory_2”是一个变量。

好的,但对于您似乎试图解决的问题,这是一个非常通用(可以说“太通用”)的解决方案。 这匹配 URL 路径中的任何位置(不仅仅是整个路径段)中的“SubCategory_2”,并通过重定向保留任何查询字符串(存在于您的示例 URL 上)。 因此,这不会在您的问题中对示例 URL 执行所述重定向。

但是,您发布的指令(您说“工作正常”)不可能按书面方式工作,至少不能单独工作。 忽略 flags 参数之前缺少的空格(我假设是错字),这将导致无限的重定向循环,因为目标 URL /SubCategory_2.php也匹配正则表达式^(.*)SubCategory_2(.*)$ .

另外,这应该是 301(永久)重定向吗? 您似乎暗示这是一个“临时”解决方案?

但是,从技术上讲,在此“基本解决方案”中使“SubCategory_2”完全可变并在更大的字符串中搜索此变量“something”并重定向到“something.php”在技术上是不可能的。 你怎么知道你找到了更大的 URL 的正确部分? 您需要更具体地了解您要搜索的内容。

在您的原始问题中,您正在提取由 4 个路径段和一个查询字符串组成的 URL 路径中的第 3 个路径段。 这是一个完全合理的模式,但是当您不知道“某物”是什么时,您无法提取“某物”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM