apache - 如何使 URL 不区分大小写

标签 apache .htaccess mod-rewrite

我面临重复链接的问题(根据 Google 网站站长工具)

例如,Google 列出了 4 种与实际 URL 重复的 URL

1) mysite.com/k-Summer Season-10.htm
2) mysite.com/k-Summer%20Season-10.htm
3) mysite.com/k-summer-season-10.htm (actual link)
4) mysite.com/K---10.htm

现在如果你看一下第四个链接的结构,它清楚地表明无论你在/k- 和 -10.htm 之间写什么 您将获得第 10 页的内容,可以是如下所示的任何内容。

1) mysite.com/k-Summer Season-10.htm
2) mysite.com/k-Bummer%20Season-10.htm
3) mysite.com/k-Dumber-season-10.htm
4) mysite.com/K-Mars-&-Earth-Season-10.htm

有没有办法禁止打开其余的 URL(区分大小写和空格)并给出 404 错误或将它们重定向到实际链接?

下面是我的 .htaccess 的代码

RewriteEngine On

RewriteRule ^lightbox.htm$ lightbox.php?%{QUERY_STRING}
RewriteRule ^lightbox.([0-9]+).htm$ lightbox.php?page=$1&%{QUERY_STRING}
RewriteRule ^search.htm$ search.php?%{QUERY_STRING}
RewriteRule ^search.([0-9]+).htm$ search.php?page=$1&%{QUERY_STRING}
RewriteRule ^postcard([a-zA-Z0-9]+).htm$ postcards.php?postcard_id=$1&%{QUERY_STRING}
RewriteRule ^postcard.img([0-9]+).htm$ postcards.php?image_id=$1&%{QUERY_STRING}
RewriteRule ^k-(.*)-([0-9]+).htm categories.php?cat_id=$2&%{QUERY_STRING}
RewriteRule ^cat.htm$ categories.php?%{QUERY_STRING}
RewriteRule ^r-(.*)-([0-9]+).htm details.php?image_id=$2&%{QUERY_STRING}
RewriteRule ^r([0-9]+).search.htm details.php?image_id=$1&%{QUERY_STRING}

ErrorDocument 404 /404.php

RewriteRule ^sitemap.xml$ google.php

亲切的问候

JoJAF

最佳答案

尝试指定<link rel="canonical" />标签:

<link rel="canonical" href="http://mysite.com/k-summer-season-10.htm" />

StackOverflow 就是这样做的 - 查看此页面的源代码。更多信息here .


或者,在 PHP 脚本中,您可以根据真实 URL 检查原始 URL,并在必要时将用户重定向到真实 URL。请参阅this question有关如何在任何重写规则之前获取原始 URL 的详细信息。


最后,你为什么使用 .htm您所有网址中的后缀? URL 重写方案的好处之一是您不需要类似的东西来弄乱您的 URL。

关于apache - 如何使 URL 不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642498/

相关文章:

apache - 将非 SSL 域重定向到具有不同 TLD 的 SSL 域

javascript - AngularJS:使用history.pushState()删除 "#"

apache - .htaccess 中单个 RewriteCond 的多个 RewriteRules

apache - 在 Apache 服务器上安装 cakephp 时未找到 cakephp/app/wwwroot/

php - 如何覆盖 Apache/PHP 存储在/tmp 中的文件的默认权限?

linux - AH02429 : Response header name 'record Created - ' contains invalid characters, 中止请求

macos - Yosemite 的 Apache localhost 403 错误

java - "Hive Runtime Error while processing row"(仅在 MR 上)

apache - 使用 Apache 将端点转发到同一主机上的不同端口

php - .htaccess 影响子域中的目录