如何在nginx中使用.htaccess文件

San*_*ran 13 apache .htaccess mod-rewrite nginx

我目前正在将我的网站从Apache迁移到nginx,但我的.htaccess文件无效.我的网站在/usr/share/nginx/html/mywebsite文件夹里面.我如何.htaccess在我的nginx服务器中使用?

这是我的.htaccess档案:

RewriteEngine on
RewriteRule video/watch/([a-zA-Z0-9_@$*-]+)/?$ "videos-single.php?id=$1" [NC]
Run Code Online (Sandbox Code Playgroud)

uzs*_*olt 18

nginx不支持.htaccess(见这里:"你不能这样做.你不应该.如果你需要.htaccess,你可能做错了.").

你有两个选择(据我所知):

  • 如果您使用的是共享服务器怎么办?您无权访问 /etc/nginx 那么是否有类似于 .htaccess 的配置文件用于您的子域所在的文件夹? (3认同)

Ger*_*ald 6

免责声明:我是htaccess for nginx的作者,它现在是开源软件。

在过去的几年里,我创建了一个插件,它在 nginx 中实现了 htaccess 行为,尤其是像RewriteRule,Allow和 之类的东西Deny,这对网络安全至关重要。该插件在我自己的生产环境中使用没有问题。

我完全同意 nginx 的效率和速度,以及为什么他们没有实现 htaccess。不过,想一想。如果您使用 nginx 和 htaccess,情况就更糟了。您仍然可以保持 nginx 的出色性能,而且您可以在一台网络服务器上轻松驱动您的旧设备。

  • 偏离主题,但这是一个令人烦恼的事情。这是“披露”而不是“免责声明”。您正在透露您是作者。 (3认同)
  • 我决定将我的代码作为开源项目发布:https://github.com/e404/htaccess-for-nginx 非常欢迎拉取请求。 (2认同)
  • @liamvictor 请参阅 [EL&U](https://english.stackexchange.com/q/115850/239338) 和 [ELL](https://ell.stackexchange.com/q/278312/51868) 上的这些问题。 (2认同)

joh*_*odo 5

这在 nginx 中不受官方支持。如果您需要这种功能,您将需要使用 Apache 或其他支持它的 http 服务器。

也就是说,官方的 nginx 推理是有缺陷的,因为它将用户想要做的事情与它的完成方式混为一谈。例如,nginx 可以轻松地每 10 秒/分钟左右检查一次目录,或者它可以使用 inotify 和类似的机制。这将避免对每个请求都进行检查的需要......但知道这对你没有帮助。:)

您可以通过编写一个脚本来解决此限制,该脚本将等待 nginx 配置文件出现,然后将它们复制到/etc/nginx/conf.d/. 然而,可能存在一些安全隐患——因为.htaccess在 nginx 中没有本机支持,也不支持限制配置文件中允许的配置指令。天啊。

  • 我不同意扫描文件是无用的资源使用这一推理,但绝对不需要那么极端。可以使其仅查看根目录以查找最终用户定义的额外conf 文件。它需要成为自己的新conf块(DirectoryOverride?)并通过查看文件修改时间在内存中重新加载nginxconf。1)它甚至不需要在每个请求时都执行;2) 允许对最终用户配置进行预验证和缓存;3)它仍然允许最终用户使用位置块来保护目录并添加重写。 (2认同)