如何在 Nginx 中使用 .htaccess 文件?

Posted

技术标签:

【中文标题】如何在 Nginx 中使用 .htaccess 文件?【英文标题】:How can I use an .htaccess file in Nginx? 【发布时间】:2016-06-16 10:54:15 【问题描述】:

我目前正在将我的网站从 Apache 迁移到 nginx,但我的 .htaccess 文件无法正常工作。我的网站位于/usr/share/nginx/html/mywebsite 文件夹中。如何在我的nginx 服务器中使用.htaccess

这是我的.htaccess 文件:

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

【问题讨论】:

【参考方案1】:

Nginx 不支持.htaccess(参见here:“你不能这样做。你不应该这样做。如果你需要.htaccess,你可能做错了。” em>)。

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

将您的.htaccess 导入到nginx.conf(也许htaccess to nginx converter 可以帮助您) 使用authd-htpasswd(我没试过)

【讨论】:

我认为/etc/nginx/nginx.conf - 请参阅nginx 包的文件列表。 如果您使用共享服务器怎么办?您无权访问 /etc/nginx 那么您的子域所在的文件夹是否有类似于 .htaccess 的配置文件? @NaturalBornCamper 那么我猜你将不得不使用 Apache。【参考方案2】:

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

在过去的几年里,我创建了一个 plugin which implements htaccess behaviour into nginx,尤其是像 RewriteRuleAllowDeny 这样的东西,这对于网络安全至关重要。该插件在我自己的生产环境中使用没有问题。

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

【讨论】:

太难集成您的软件。你应该写一个完整的教程 你能检查一下这个错误吗:“无法加载外部Lua文件”/etc/nginx/htaccess-for-nginx/htaccess-1.2.1-bytecode.lua”:/etc/nginx/htaccess -for-nginx/htaccess-1.2.1-bytecode.lua:无法加载不兼容的字节码”。导致 Nginx 响应 500 错误 @Tony 看起来像是 Lua 版本不匹配。确保安装正确的 Lua JIT 版本。 我决定将我的代码作为一个开源项目发布:github.com/e404/htaccess-for-nginx 非常欢迎拉取请求。 ...开源,但如果您想以任何有意义的方式使用它,则需要许可证。【参考方案3】:

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

也就是说,official nginx reasoning 存在缺陷,因为它将用户想要做的事情与它的完成方式混为一谈。例如,nginx 可以很容易地每隔 10 秒/分钟左右检查一次目录,或者它可以使用 inotify 和类似的机制。这样可以避免在每个请求上都检查它......但是知道这对您没有帮助。 :)

您可以通过编写一个等待 nginx 配置文件出现然后将它们复制到 /etc/nginx/conf.d/ 的脚本来绕过这个限制。但是可能存在一些安全隐患——因为在 nginx 中没有对 .htaccess 的原生支持,所以也不支持在配置文件中限制允许的配置指令。 YMMV。

【讨论】:

以上是关于如何在 Nginx 中使用 .htaccess 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 .htaccess 文件转换为 NGINX?

php配置伪静态如何将.htaccess文件转换 nginx伪静态文件

LANMP 如何禁止访问 .htaccess 文件

.htaccess-SetEnvIf 到 NGinx-fastcgi_param 的转换

将Apache的.htaccess转换到nginx中

在iis上使用Htaccess文件(Windows 10)