我正在尝试创建一个python脚本(widget.py),它将从任意资源获取JSON提要。我无法让python脚本在localhost上执行。以下是我遵循的步骤:
etc/apache2/httpd.conf
我启用了LoadModule cgi_module libexec/apache2/mod_cgi.so
sudo apachectl restart
在我的目录中添加了一个.htaccess文件:
<Directory "widget.py">
Options +ExecCGI
AddHandler cgi-script .py
</Directory>
注意:我最终需要在我无法访问apache2目录的服务器上部署它。
导航至http://localhost/~walter/widget/widget.py
我收到500服务器错误。日志文件内容:
[Sat Jul 01 08:51:00.922413 2017] [core:info] [pid 75403] AH00096: removed PID file /private/var/run/httpd.pid (pid=75403)
[Sat Jul 01 08:51:00.922446 2017] [mpm_prefork:notice] [pid 75403] AH00169: caught SIGTERM, shutting down
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host.example.com] does not exist
AH00112: Warning: DocumentRoot [/usr/docs/dummy-host2.example.com] does not exist
[Sat Jul 01 08:51:01.449227 2017] [mpm_prefork:notice] [pid 75688] AH00163: Apache/2.4.25 (Unix) PHP/5.6.30 configured -- resuming normal operations
[Sat Jul 01 08:51:01.449309 2017] [core:notice] [pid 75688] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
我是否需要在/etc/apache2/users/walter/http.conf
中启用cgi?我应该吗?
答案 0 :(得分:2)
让它发挥作用。以下是我遵循的步骤:
在etc/apache2/httpd.conf
我取消注释:
LoadModule cgi_module libexec/apache2/mod_cgi.so
重启Apache sudo apachectl restart
列表项将.htaccess文件添加到我的目录中,其中包含以下内容:
Options ExecCGI
AddHandler cgi-script .py
Order allow,deny
Allow from all
在我的python脚本
#!/usr/bin/env python
chmod +x widget.py
答案 1 :(得分:1)
Apache / WebSharing
他们没有GUI来打开或关闭OSX 10.10中的Web共享功能,而OSX 10.10以前是10.7中“系统偏好设置”中的GUI选项,但担心没有安装Apache,可以启动它。
这需要在位于 / Applications / Utilities / Terminal
的终端中完成对于那些不熟悉终端的人来说,它确实没有您想像的那么吓人,一旦启动,您将面临命令提示符等您的命令-只需在命令中键入/粘贴并按Enter,某些命令没有响应-仅表示命令已完成,其他命令为您提供反馈-让我们开始吧……。
开始
sudo apachectl start
停止
sudo apachectl stop
重新启动
sudo apachectl restart
查找Apache版本
httpd -v
OSX Yosemite附带的Apache版本是Apache / 2.4.10
启动Apache之后–测试网络服务器是否在浏览器中正常运行– http://localhost –您应该看到“ It Works!”文本。
如果未通过localhost测试,则可以尝试运行Apache进行故障排除,以查看其配置文件中是否有任何错误
apachectl configtest
–重要的是要检查是否正确配置
这将为您指出可能出了什么问题。
文档根目录
文档根目录是从文件系统共享文件的位置,与传统名称“ public_html ”和“ htdocs ”相似,OSX在历史上有2个Web根,一个在系统级别,一个在用户级别–您可以同时设置或仅与一个用户一起运行,一个用户级别允许多个帐户拥有自己的Web根,而系统一个对所有用户都是全局的。 Apple似乎在继续进行一级用户方面的工作较少,但仍可以通过对配置文件进行一些额外的调整来进行设置。使用一级用户更容易,因为您不必继续以管理员身份进行身份验证。 系统级网络根 –默认系统文档根目录仍位于– http://localhost/ 这些文件在归档系统中的–
处共享/Library/WebServer/Documents/
用户级别根
默认情况下缺少的另一个Web根目录是用户帐户中的“ 〜/站点”文件夹。设置需要花费一些时间,但是有些用户已经习惯了使用它。
您需要在帐户的根目录下创建一个“ 站点”文件夹,然后该文件夹才能工作。制作好Sites文件夹后,您会注意到它具有一个唯一的图标,该图标是一些较旧版本的回溯。在设置接下来描述的用户配置文件之前,先创建该文件夹。
您还需要进行一些其他调整,以恢复〜/ Sites 文件夹并运行。
在Sites文件夹中创建cgi-bin文件夹,并将cgi-bin权限设置为可全局写入。如果不是a + rwx,则说明该文件夹不可写
chmod a+rwx cgi-bin
添加在以下位置归档的“ username.conf”
/etc/apache2/users/
如果您还没有一个(很有可能),则创建一个以后缀为。 conf 的帐户的短用户名命名的帐户,最好通过以下方法解决它的位置和权限/所有权:使用端子,文本编辑器“ nano ”将是处理此问题的最佳工具。
启动终端,(应用程序/实用程序),并按照以下命令操作,第一个将您带到正确的位置,第二个将在命令行上打开文本编辑器(交换'用户名”,如果您不知道帐户的简称,请在终端提示下输入“ whoami”):
cd /etc/apache2/users
sudo nano accountname.conf
然后在下面的代码中的“帐户名”中添加下面交换的内容:
<Directory "/Users/accountname/Sites/">
AllowOverride All
Options Indexes MultiViews FollowSymLinks
Require all granted
</Directory>
<Directory "/Users/accountname/Sites/cgi-bin/">
AllowOverride None
Options ExecCGI
AddHandler cgi-script .cgi .pl .tcl .py
Order allow,deny
Allow from all
</Directory>
取消注释服务器名称并提供域名
ServerName localhost:8080
对该文件的权限应为:
-rw-r--r-- 1 root wheel 298 Jun 28 16:47 accountname.conf
如果不需要,您需要更改...
sudo chmod 644 accountname.conf
打开主要的httpd.conf并允许一些模块:
sudo nano /etc/apache2/httpd.conf
并确保未注释这4个模块(前2个应在全新安装中):
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
LoadModule php7_module libexec/apache2/libphp7.so
在权限下方搜索更新目录。
<Directory />
#Options FollowSymLinks
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
搜索ScriptAliasMatch并将其替换为ScriptAlias,并替换为我们的自定义Sites / cgi-bin文件夹路径
ScriptAlias "/cgi-bin/" "/Users/accountname/Sites/cgi-bin/"
搜索并替换为我们的自定义文件夹权限
<Directory "/Users/accountname/Sites/cgi-bin">
AllowOverride All
Options +ExecCGI
Require all granted
AddHandler cgi-script .cgi .py
</Directory>
搜索“ AddHandler ”并在下面添加处理程序
AddHandler cgi-script .cgi
AddHandler cgi-script .py
如果以上行产生问题,则将其注释掉 还要在 httpd.conf
中取消注释该配置文件Include /private/etc/apache2/extra/httpd-userdir.conf
然后打开另一个Apache配置文件并取消注释另一个文件:
sudo nano /etc/apache2/extra/httpd-userdir.conf
取消注释:
Include /private/etc/apache2/users/*.conf
重新启动Apache以读取新文件:
sudo apachectl restart
然后可以在以下位置查看此用户级别文档的根目录:
http://localhost/~accountname/
如果文件夹为空,则应该只看到类似于目录树的结构。
覆盖.htaccess并允许URL重写
如果要在/ Library / WebServer / Documents中使用文档根目录,则最好允许使用任何。 htaccess 文件覆盖默认设置-这可以通过编辑来实现第217行的 httpd.conf 文件,并将 AllowOverride 设置为 All ,然后重新启动Apache。通过执行上一步,已经在站点级别的webroot上解决了此问题。
sudo nano /etc/apache2/httpd.conf
此外,尽管这里允许URL重写,所以您的永久链接看起来干净而丑陋。 在httpd.conf
行下方取消注释LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Python
一旦我们在provola.py中创建了python文件html代码,使其可执行并放置在〜/ Sites / cgi-bin /文件夹内
sudo chmod +x provola.py
重新启动apache
sudo apachectl restart
引用链接-http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/
答案 2 :(得分:0)
1,2。好的。
<Directory "widget.py">
- 我想你想要<File "widget.py">
。