.htaccess 为什么MAMP(mac)使用端口80会导致禁止访问,而端口8888工作正常?

sbdsn5lh  于 2022-11-16  发布在  Mac
关注(0)|答案(5)|浏览(151)

我刚刚把我的开发环境从一台旧机器移到了一台新的MAC上。我喜欢把MAMP用于我的一般本地环境(更简单的项目),但是出于某种原因,最近版本的MAMP想让我把端口8888用于我的localhost。
我把它改回了端口80,这是我在旧机器上的MAMP上的端口,而且我有一些绝对的开发链接,所以我不想麻烦地把localhost:8888而不仅仅是localhost放在我的Uri:s的开头
结果是无法访问任何资源,一切都是禁止的。将端口改回8888,它工作正常。
为什么会出现这种情况?
其他人似乎在一个月前(X1 E0 F1 X)也遇到了同样的问题,但没有解决方案。

  • --------更新
    lsof -I传输控制协议:80
COMMAND    PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    Google     973 mattias   28u  IPv6 0x269b774a91275221      0t0  TCP localhost:54383->localhost:http (CLOSE_WAIT)
    Google     973 mattias   36u  IPv6 0x269b774a91275881      0t0  TCP localhost:54384->localhost:http (CLOSE_WAIT)
    httpd     5444 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5445 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5446 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5447 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5448 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5449 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5461 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5468 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5476 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5477 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)
    httpd     5478 mattias    4u  IPv6 0x269b774a912738a1      0t0  TCP *:http (LISTEN)

此外,http://localhost/MAMP/也可以正常工作
当我尝试访问webroot中我自己的任何文件夹时,我被禁止:
如果我尝试一级文件夹(即http://localhost/myapp/,位于webroot/myapp中),我只会得到
您没有权限访问该资源,请稍后重试!
但如果我尝试使用子文件夹或PHP文件,例如http://localhost/myapp/subfolder/或http://localhost/myapp/subfolder/index.php
然后我就得到了

禁止访问您没有权限访问此资源。服务器无法读取htaccess文件,为安全起见拒绝访问

如果我将MAMP配置为使用不同的端口,一切都可以正常工作。但我不想在dev env中指定路由中的端口,因为我正在使用的应用程序有一些硬编码的URI:s。
此外,这是一个奇怪的行为,惹恼了我=)我的另一个MAC没有这样做,所以我想得到它的底部...
----另一个更新
我已经把我的web根目录(htdocs我相信MAMP默认叫它)移到了我的用户文件夹(user/Home/Documents/www),如果它与权限相关的话,但是我不明白为什么它在端口8888下工作得很好,而在80下就不行了......这不像Apache根据它运行的端口来访问我的文件夹......
-------请求的信息
我偶尔会启动一个节点服务器,只是为了检查一个人的工作,但目前没有运行。当它运行在端口3000下运行。
.htaccess到我的站点/文件夹:重写引擎在重写条件%{HTTP_HOST} ^域名.com$ [NC,OR]上重写条件%{HTTP_HOST} ^www.domain-name.com $重写条件%{请求URI}!文件夹/重写规则(.*)/文件夹/$1 [L]
Mac版本大苏尔11.3.1
MAMP版本6.3

blpfk2vs

blpfk2vs1#

发生这种情况是因为有其他应用程序使用端口80。想到的一个是skype。您可以尝试lsof -i tcp:80来查看哪些进程正在锁定端口80。

xn1cxnb4

xn1cxnb42#

我已经把我的webroot(htdocs我相信MAMP默认叫它)到我的用户文件夹(user/Home/Documents/www),如果它是以某种方式相关的权限,但我不明白为什么它然后在端口8888下工作正常,而不是在80下...
这就是问题所在。我不知道为什么不同的端口会有不同的行为,但是将wwwroot设置为MAMP/htdocs并将我的应用程序移到那里解决了这个问题。
我不会将此标记为答案,以防有人可以解释为什么MAMP获得权限wwwroot时,它在我的主文件夹,只要它运行在端口8080或其他东西,而没有权限,而在端口80,这将是这个问题的最佳答案...

bfrts1fy

bfrts1fy3#

我能想到的原因可能有很多。我还想为每一个原因提出一个解决方案。
首先,Mac(达尔文)是基于Linux的,这意味着1024以下的端口是特权端口,任何运行在3环(userland)的应用程序都不能访问这些端口。
您需要使用sudo权限运行应用程序。这当然会带来安全风险,并且应该在适当的考虑之后才这样做。通常您不应该使用sudo运行Web服务器(和开发环境,如MAMP)。请参阅我的最后一点,以获得解决方案,这通常在许多生产环境中用作最佳实践。
第二,很有可能你试图以root身份运行它,但是端口仍然无法访问。这可能是因为端口已经被另一个应用程序占用了。
要检查这一点,你可以发出lsof -i tcp:80,我可以看到你无论如何都做了。杀死其他为你阻止这个端口的应用程序。有时退出应用程序是不够的,你可能必须使用sudo kill -9 pid。更多信息在这个man page中。
第三,Mac特有的问题可能是(我认为这是你的情况,因为你在访问webroot和子文件夹时看到不同的错误),要么是网关守卫阻止MAMP访问目录,要么是chmod权限不正确(* 因为我看到了.htaccess投诉 *)。

  • 首先检查Mac Gatekeeper System Preference -> Pivacy & Security -> General是否未阻止应用程序。
  • 然后检查是否已从Full Disk AccessSystem Preference -> Pivacy & Security -> Privacy下可用的Files and Folders为MAMP启用目录访问
  • 最后,你可以递归地在你的项目目录上设置一个chmod 755权限,在. chmod -R 755 DIRECTORY文件上设置一个644权限。

最后,如果没有其他方法,您可以在其他端口上运行MAMP,然后使用iptables将所有本地流量从端口80重定向到该端口。这也是Web服务器在生产环境中的实际配置方式,如果它们没有隐藏在负载平衡器或反向代理之后的话。请参考AskUbunu帖子中的说明。

yqlxgs2m

yqlxgs2m4#

Jorge Aranda费尔南德斯的答案对我很有用,当时我正在尝试让MAMP Pro的演示版工作。我已经在8888端口上运行MAMP Free很多年了,所以我一直在尝试让MAMP Pro在80端口上运行,以保持它们的独立性。作为一个链接的图像可能会持续,也可能不会持续,这些是完整的说明。
注意:原作者说这是对端口8888的修复(确实是)。但是,最初的问题是关于访问端口80的,这也修复了。
MAMP Pro内
1.在主面板的左上角,选择Expert View图标作为查看模式。
1.从左侧选择SETTINGS下的Hosts。然后选择Names下的localhost
1.共有7个选项卡。选择Apache
1.在Options for <Directory> directive:下,确保第一个框Indexes有一个勾号。
1.底部有RevertSave两个按钮,点击Save,系统会提示重启服务器。
1.在您的浏览器中测试https://localhost:80,它现在应该连接。

daolsyd0

daolsyd05#

设置Apache选项卡时,请选中“索引”框:

这样你就可以访问你的localhost:8888了。

相关问题