如何处理将公共目录放置在公共目录中的PHP项目

衬里创意

假设您有一个像这样的PHP项目:

/config/
/lib/
/public/ -- Only this folder is supposed to be public.

但是它完全上传到Apache的公共目录中。由于某些用户可能不知道自己在做什么,因此Web主机仅允许访问公共目录。

是否有PHP / .htaccess解决方案来处理这种情况?

最好不要访问config和lib目录,并且像/img/header.png这样的URI仍然可以使用。

公共目录中还将包含一个.htaccess文件,这会破坏mod_rewrite解决方案的事情吗?

编辑:

尚未能够解决此问题。这是有关手头问题的一些更详细的信息。

/public/目录中,我index.php在单独的目录中有一个文件和其他公共文件,如JavaScript,CSS和Images。我的.htaccess档案也在这里。该文件包含以下mod_rewrite代码:

RewriteEngine On
Options +FollowSymlinks

# Set %{ENV:PROTO} variable, to allow rewrites to redirect with the
# appropriate schema automatically (http or https).
RewriteCond %{HTTPS} =on
RewriteRule ^ - [env=proto:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^ - [env=proto:http]

# Rewrite www.example.com → example.com
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]

# Block access to all hidden files and directories with the exception of
# the visible content from within the `/.well-known/` hidden directory.
RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]

RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]

当httpd的公共目录是正确的并且一切正常时,/public/但我要的是一种可以抵消用户将项目文件直接上传到公共目录中的可能性的方法。

例如,我的目录最终如下。

/public_html/config/
/public_html/lib/
/public_html/public/

我试图.htaccess在我的项目根目录中使用一个文件来解决这个问题,但是没有任何运气。即使我将流量重定向到/public_html/public/.htaccessin/public_html/public/也将覆盖mod_rewrite重定向到代码/public_html/public/

衬里创意

好的; 这就是我想出的。这非常简单。

.htaccess我的项目根目录中文件包含以下内容:

RewriteEngine On
RewriteRule ^(.*) public/$1 [L,PT]

然后将以下内容附加到.htaccess我的项目公用文件夹中。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L,PT]

它的工作方式似乎与现在上传的位置无关。即使存在非公用文件夹,您也无法访问它们。由于所有请求均发送到index.php该文件夹,因此不在公用文件夹中。

我唯一不喜欢的是您仍然可以添加/public/到URI并获取同一页面。这不像我将在我的公共目录中有第二个公共目录,所以这应该不是问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用.zshrc将〜/ .composer / vendor / bin目录放置在您的PATH中

来自分类Dev

tar +如何从/ var / tmp中解压缩以将目录放置在/下

来自分类Dev

如何使用.htaccess将公共PHP文件制作到目录?

来自分类Dev

如何覆盖“公共”目录?

来自分类Dev

如何进入公共目录

来自分类Dev

如何将存档文件的指定目录放置到所需位置?

来自分类Dev

Laravel从公共目录中删除目录

来自分类Dev

如何处理嵌套目录中的文件?

来自分类Dev

无法将图像上传到laravel中的公共目录

来自分类Dev

如何使用parcel-bundler将公共目录中的所有文件添加到构建目录

来自分类Dev

CakePHP:如何允许公共访问/ webroot以外的目录中的文件

来自分类Dev

如何确定Laravel 5.2的公共目录中是否存在文件

来自分类Dev

如何从Rails 4中的Controller下载公共目录?

来自分类Dev

如何在主目录中列出公共文件?(模式777)

来自分类Dev

如何从子组件中的公共目录加载图像?

来自分类Dev

流明获取公共目录

来自分类Dev

更改公共目录 laravel

来自分类Dev

使主管忽略公共目录中的JS更新

来自分类Dev

正在开发的公共目录中绕过资产

来自分类Dev

在公共资产目录中包含.html文件?

来自分类Dev

如何仅列出遵循特定目录中公共模式的某些目录的文件夹权限?

来自分类Dev

如何从根目录而不是从公共目录运行Laravel?

来自分类Dev

如何从根目录而不是从公共目录运行Laravel?

来自分类Dev

如何处理任务并行库中的目录文件?

来自分类Dev

如何处理任务并行库中的目录文件?

来自分类Dev

.htaccess:从公共目录提供静态文件,URL 中没有公共,否则重写为 index.php

来自分类Dev

在boot-clj项目中使用资源/公共目录

来自分类Dev

仅将某些目录放在另一个分区的主目录中

来自分类Dev

在Laravel 5中将FormRequest日志记录放置在何处?

Related 相关文章

  1. 1

    如何使用.zshrc将〜/ .composer / vendor / bin目录放置在您的PATH中

  2. 2

    tar +如何从/ var / tmp中解压缩以将目录放置在/下

  3. 3

    如何使用.htaccess将公共PHP文件制作到目录?

  4. 4

    如何覆盖“公共”目录?

  5. 5

    如何进入公共目录

  6. 6

    如何将存档文件的指定目录放置到所需位置?

  7. 7

    Laravel从公共目录中删除目录

  8. 8

    如何处理嵌套目录中的文件?

  9. 9

    无法将图像上传到laravel中的公共目录

  10. 10

    如何使用parcel-bundler将公共目录中的所有文件添加到构建目录

  11. 11

    CakePHP:如何允许公共访问/ webroot以外的目录中的文件

  12. 12

    如何确定Laravel 5.2的公共目录中是否存在文件

  13. 13

    如何从Rails 4中的Controller下载公共目录?

  14. 14

    如何在主目录中列出公共文件?(模式777)

  15. 15

    如何从子组件中的公共目录加载图像?

  16. 16

    流明获取公共目录

  17. 17

    更改公共目录 laravel

  18. 18

    使主管忽略公共目录中的JS更新

  19. 19

    正在开发的公共目录中绕过资产

  20. 20

    在公共资产目录中包含.html文件?

  21. 21

    如何仅列出遵循特定目录中公共模式的某些目录的文件夹权限?

  22. 22

    如何从根目录而不是从公共目录运行Laravel?

  23. 23

    如何从根目录而不是从公共目录运行Laravel?

  24. 24

    如何处理任务并行库中的目录文件?

  25. 25

    如何处理任务并行库中的目录文件?

  26. 26

    .htaccess:从公共目录提供静态文件,URL 中没有公共,否则重写为 index.php

  27. 27

    在boot-clj项目中使用资源/公共目录

  28. 28

    仅将某些目录放在另一个分区的主目录中

  29. 29

    在Laravel 5中将FormRequest日志记录放置在何处?

热门标签

归档