【问题标题】:Redirect all access from a folder to a PHP file将所有访问从文件夹重定向到 PHP 文件
【发布时间】:2016-05-18 20:20:59
【问题描述】:

我想做这样的任务。

我有一个文件夹 /doc/ 里面有很多文档文件。当用户尝试访问此文件夹的内容时,我需要进行一些验证,因此我需要将该访问重定向到根文件夹中的 download.php 文件,并将实际的 REQUEST_URI 传递给 PHP 文件。我在 htaccess 文件中尝试这个:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/doc.*$ [NC]
RewriteRule ^(.*)$ http://example.com/download.php?r=%{REQUEST_URI} [L,R=301]

但是我收到了 ERR_TOO_MANY_REDIRECTS 错误,重定向的 url 是:download.php?r=/download.php,在这种情况下,这不是我想要的(download.php?r=/doc/abc/xyz.pdf 是正确的)

有人可以为我解释我做错了什么吗?非常感谢。

【问题讨论】:

  • 您的重写条件行不正确,它将永远循环下去。您需要添加一个文件检查,这样它就不会每次都使用重写条件。所以它只会在它指向一个不存在的文件时使用它添加以下行 RewriteCond %{REQUEST_FILENAME} !-d

标签: php .htaccess redirect


【解决方案1】:

您的 rewritecond 行不正确,它将永远循环下去。您需要添加一个文件检查,这样它就不会每次都使用重写条件。所以它只会在它指向一个不存在的文件时使用它 添加以下行

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^doc\/(.*)\.html$ download.php?r=$1 [L,R=301]

网址为http://example.com/doc/file.html

如果你想捕获文件扩展名,它会将用户重定向到 download.php?r=file 将最后一行更改为

RewriteRule ^doc\/(.*)$ download.php?r=$1 [L,R=301]

【讨论】:

  • 您好,谢谢您的回答。假设我想将example.com/doc/file.html 重定向到example.com/download.php
  • 谢谢,但是如何重定向 /doc/ 文件夹中的所有 url,例如 /doc/star/file.pdf 和 /doc/biz/new/file.html?
  • 我的回答的第二部分将做到这一点。您将在下载脚本中获得 r=star/file.pdf,您可以从那里进行处理
  • 啊抱歉,去掉 !-f 行。我会更新我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2013-01-05
  • 2013-01-28
  • 2021-05-08
相关资源
最近更新 更多