【问题标题】:htaccess, www redirect fake subdirectoryhtaccess, www 重定向假子目录
【发布时间】:2013-07-12 22:36:41
【问题描述】:

常见问题,但对我来说太复杂了。

以下是我试图满足的要求:

  1. 根 URL http://example.com 应重定向到 http://www.example.com
  2. 所有像http://example.com/c/1234567890 这样的网址都应该重定向到http://www.example.com/c/1234567890(注意“c”假子目录)
  3. 输入 http://example.com/index.php 时,应将其重定向到 http://www.example.com(没有尾部斜杠)
  4. 除此之外,我正在尝试但未能保护子文件夹“xy”免受根目录和 javascript 文件中的 php 文件的直接访问。

我搜索了很多,尝试了很多重写条件和规则,但是htaccess+regex对我来说只是来自另一个星球。 :/ 抱歉,如果这是重复的……

【问题讨论】:

  • example.com/[something] 中是否有不应重定向到 www,example.com/[something] 的地址?我问是因为满足第一个要求的通常方式可以重定向所有关联的路径,而不仅仅是顶部。
  • 嘿,不会有像 example.com/[something] 这样的地址,只有 example.com/search?=xy。其他所有内容都包含虚假子文件夹“c”,这意味着它将是 example.com/c/[something]
  • 因此,如果没有人寻找“c”,而只是将所有内容从 example.com 重定向到 www.example.com,保留斜杠之后的内容,这会处理 #1 和 #2,对吧? #3 也是这样吗?不像写的那样...#3 是否正确,您希望 example.com/index.php 去 www.example.con 没有 / 也没有 /index.php?还是您希望 example.com/index.php 转到 www.example.com/index.php ?如果您认为#3 是错误的,您可以点击编辑并修改它。
  • 我已经有一段时间没有真正做过这些了,所以我会让其他人试一试。 #4 比 1-3 更难。简单但业余的方法是检查由网络浏览器(如 IE 或 Chrome 或 Firefox)填写并发送到服务器的 REFERER 字段,以查看它是否与页面的域名匹配。它会阻止普通好奇的人直接使用浏览器访问该文件夹。它不会阻止使用各种工具的脚本,因为来自 Web 浏览器的所有字段都可以被该工具伪造。 CSRF 令牌更好,但涉及更多。
  • 我希望我没有理解你的意思:) 如果有人在最​​后输入带有“index.php”的 url,它应该去掉“index.php”并重定向到 www.example.com跨度>

标签: .htaccess


【解决方案1】:

这些将位于文档根目录的 htaccess 文件中。开启重写引擎

RewriteEngine On

对于 1 和 2:如果根请求或请求 /c/(something),则重定向到“www”

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(c/.+)?$ http://www.example.com%{REQUEST_URI} [L,R=301]

对于 3:将 /index.php 的直接请求重定向到 /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^ / [L,R=301]

对于 4:禁止直接访问 /xy/ 目录中的任何内容。

RewriteCond %{HTTP_REFERER} !http://(www\.)?example\.com/ [NC]
RewriteRule ^xy/ - [L,F]

【讨论】:

  • 非常感谢您的回答!我现在尝试了 1-3,但不知何故,只有从 [example.com] 到 [www.example.com] 的重定向以及如果在 root 上删除尾部斜杠 [/] 效果很好。不知道我是否遗漏了什么……
  • #4 现在是多余的,因为无论如何我都需要通过 Ajax 访问文件夹 [xy]。我应该从最初的问题中删除它吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多