【发布时间】:2012-01-17 14:28:04
【问题描述】:
这是我的重写规则:
###########
# Rewrite #
###########
# Settings
RewriteEngine On
RewriteBase /
# Cache Busting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} "^(.+)\.\d+\.(css|js)$" [NC]
RewriteRule "^.*$" "/%1.%2" [L]
# No Index
RewriteCond %{THE_REQUEST} "\ /.*index\.php.*\ " [NC]
RewriteRule "^(.*)index\..+$" "/$1" [L,NC,R=301]
# No Question Mark
RewriteCond %{THE_REQUEST} "\ /[^?]*\?\ "
RewriteRule "^(.*)$" "/$1?" [L,R=301]
# WWW
# RewriteCond %{HTTP_HOST} !"^(?:static|www)\.(.+)$" [NC]
# RewriteCond %{HTTPS}s "^on(s)|"
# RewriteRule "^(.*)$" http%2://www.%1/$1 [L,R=301]
一切正常(无论如何,任何提高性能或更好正则表达式的建议都是受欢迎的)但我遇到了一个奇怪的情况,我无法理解它是由我的重写规则还是由默认的 Apache 行为产生的。 如果我的 URL 以“/”结尾,我可以在不重写的情况下添加任意数量的斜杠。
例如,如果我在地址栏中插入以下内容:
http://[MY-HOST-NAME]///////////////////////
所有这些斜线都没有被删除。而且我仍然看到我的 index.php 页面。 如果我插入以下地址:
http://[MY-HOST-NAME]/members///
所有这些多个斜杠都没有被删除,我可以看到我的成员 index.php 页面。 等等……
有人可以帮帮我吗?非常感谢!
【问题讨论】:
-
好吧,究竟哪个规则应该重写斜线,为什么? (我不会打扰并将太多的斜线视为“用户错误”,但是......)
-
为什么重要?如果您的网站 从来没有添加不应该存在的额外斜杠,那么不要担心。为什么要浪费额外的 HTTP 请求来删除用户手动添加的额外斜杠,这最终不会影响显示的页面?
-
对我来说重要与否为什么重要?如果您有解决方案,那很好,请发布。如果你没有就不要回答。我要求它是因为我看到大量机器人同时请求“/”和“//”(包括 Google Bot),这可以使我的索引页面在搜索引擎中被索引两次。对 SEO 不太友好。
-
无需私人化。有了你提供的信息,我也会回答同样的问题。所有网站都有同样的问题,甚至 google (google.nl///)。您应该刚刚将评论中的信息添加到原始帖子中。但是要回答您的问题,搜索引擎使用多余的斜杠抓取网址的原因很可能是因为您的 html 中的网址有双斜杠。搜索引擎通常不会猜测网址。搜索引擎也足够聪明,知道这些网址很可能意味着相同。就像他们知道
/可能与/index.php一样。
标签: apache .htaccess mod-rewrite url-rewriting slash