.htaccess 一切重定向到index.php,但仍然直接访问PDF的

vxf3dgd4  于 2023-10-23  发布在  PHP
关注(0)|答案(1)|浏览(138)

我有一个PHP项目,我重定向每个URL到index.php .但上传文件夹中的文件(.png,.pdf等)可以直接访问.有没有办法防止这种情况,也重定向像https://example.com/uploads/asdf.pdfindex.php的URL.
这是我的.htaccess文件:

AddType application/x-httpd-php .html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

.htaccess文件进行了一些更改,但没有帮助。

7y4bm7vi

7y4bm7vi1#

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]

要将所有未Map到物理文件或Map到/uploads目录中的.pdf文件的请求重写为index.php,则基本上只需在上述规则中添加一个额外的OR 'd条件。
举例来说:

RewriteCond %{REQUEST_URI} ^/uploads/[^/]+\.pdf$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

因此,上面指出,任何形式为/uploads/<file>.pdf的请求(无论.pdf文件是否存在)OR,如果没有Map到物理对象,则会重写为index.php
如果您希望通过index.php重写/uploads目录中的 * 所有内容 *,则只需将正则表达式从^/uploads/[^/]+\.pdf$更改为^/uploads/
我还简化了RewriteRule指令中的正则表达式(并使其更有效)(因为您不需要匹配和捕获所有内容),并且QSA标志在这里是多余的。

更新:

它是如何可能与文件,这是在上传文件夹的子文件夹?
您可以在前面的条件(RewriteCond指令)中调整正则表达式。例如.

  • 上传文件夹的特定子文件夹:
RewriteCond %{REQUEST_URI} ^/uploads/subfolder/[^/]+\.pdf$ [OR]
:
  • 上传文件夹的任何子文件夹:
RewriteCond %{REQUEST_URI} ^/uploads/[^/]+/[^/]+\.pdf$ [OR]
:
  • /uploads文件夹下的任何.pdf文件(包括任何子文件夹):
RewriteCond %{REQUEST_URI} ^/uploads/.+\.pdf$ [OR]
:

有关正则表达式(regex)的详细信息,请参阅以下问题:
Reference - What does this regex mean?

相关问题