【问题标题】:Trailing slash causes 404, can I fix using htaccess?斜杠导致 404,我可以使用 htaccess 修复吗?
【发布时间】:2016-12-11 20:11:04
【问题描述】:

违规网址是:

我对这些类型的 URL 的 .htaccess 规则如下所示:

RewriteRule ^face/(.*)$ face.php?term=$1

如何使这两个 URL 转到同一页面?

【问题讨论】:

  • RewriteRule ^face/(.*)/?$ face.php?term=$1
  • 你可以在你的 PHP 脚本中使用rtrim($_GET['term'], '/')。虽然@Grexis 正则表达式方式可以说更好。
  • @DaveRandom - 您的解决方案实际上是有效的。由于某种原因,.htaccess 修复不起作用。想要添加为答案以便我接受?
  • @Jake 最好能找到 .htaccess 方式 - 试试 @Grexis 的规则,但用括号括起来 / - ^face/(.*)(/+)?$ - 或者 ^face/(.*)/*$
  • 哦等等我才意识到问题出在哪里,这是一个贪婪的*,试试^face/(.*?)/*$

标签: php .htaccess


【解决方案1】:

你可以用这个:

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.+)/$ /$1 [L,R=301]

第一行说:“如果它不是目录”(因为后面的斜杠会有意义)。第二行说:将所有内容从开头重定向到尾部斜杠并结束到那里的所有内容,没有尾部斜杠。

把你自己的RewriteRule 放在那里(在那个下面,而不是上面),这样你的正常重定向在尾部斜杠被删除后仍然有效。

(这个显然也适用于/body/,而不仅仅是/face/

【讨论】:

    【解决方案2】:

    我使用这条规则稍作修改以维护任何子文件夹结构

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
    

    【讨论】:

    • 这个和已经接受的答案有什么区别?
    猜你喜欢
    • 2015-11-05
    • 2011-07-21
    • 2010-09-17
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多