如何在 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,尤其是像 RewriteRule
、Allow
和 Deny
这样的东西,这对于网络安全至关重要。该插件在我自己的生产环境中使用没有问题。
我完全同意 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章
php配置伪静态如何将.htaccess文件转换 nginx伪静态文件