php - .htaccess 中的这两个重定向有什么区别以及如何为这两个编写单个重定向

标签 php .htaccess

我为一个客户完成了新网站,现在我正在 .htaccess 文件中进行所有重定向。我对下面几行中的源 URL 部分感到有些困惑。 这两行的工作方式是否相同?

Redirect 301 /shop/contact-us http://www.example.com/contact-us/
Redirect 301 /shop/contact-us/ http://www.example.com/contact-us/

最佳答案

如果你想用一些可选的尾部斜杠重定向 /shop/contact-ushttp://www.example.com/contact-us,那么 Redirect 指令不是很合适。使用 RedirectMatch指令改为:

RedirectMatch 301 "^/shop/(contact\-us)/?" http://www.example.com/$1/

在哪里

  • ^ 是一个 anchor ,意思是“行的开始”;
  • /? 匹配零个或一个斜杠字符;
  • (contact\-us) 是一个捕获组(由 $1 引用)

注意,正则表达式只匹配前缀,因为只使用了 ^ anchor 。您可以使用 $(行尾) anchor 以使表达式更严格,例如:

RedirectMatch 301 "^/shop/(contact\-us)/*$" http://www.example.com/$1/

其中 /* 表示零个或多个斜杠。

关于php - .htaccess 中的这两个重定向有什么区别以及如何为这两个编写单个重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805755/

相关文章:

php - 在 PHP 中将 PDF 转换为 HTML?

php - 从 mysql 中的类别部分创建列表

php - robots.txt 模式匹配不起作用

python - Flask:在此服务器上找不到请求的 URL

php - 1and1 服务器上的 Laravel

php - 在 While 循环内部,仅使用 MYSQL 数组中的最后一个结果

php - 与 XAMPP 捆绑在一起的 phpmyadmin 4.7.4 的安全问题

php - 检查字符串是否被序列化?

apache - 使用.htaccess重定向主域但不重定向某些子域

css - 将 GET 参数传递给 .htaccess