假设一个域名已指向我的服务器的IP地址..
域名一到我这里..
我想让阿帕奇执行...
python_script domain.tld
也许..
bash_script domain.tld
如果传入域如下所示:
domain.tld/test
然后..
bash_script domain.tld/test
应该被执行。
从 bash 脚本中我可以运行计算并决定显示什么。
也许由于安全问题,事情不会以这种方式进行,但安全不是我关心的问题。只是想测试一下。
答案1
apache
如果未定义虚拟主机,则默认安装将提供指向它的所有 URL。因此,您无需执行任何额外操作即可获得apache
响应。
通过将脚本放入/var/www/cgi-bin
并确保它们可以通过chmod 0755 <script name>
.
例如,如果您创建/var/www/cgi-bin/test.sh
如下:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<pre>"
env
echo "</pre>
然后导航到浏览器:http://<server name or IP>/cgi-bin/test.sh
,您应该看到类似以下内容的内容:
SERVER_SIGNATURE=
Apache/2.2.15 (CentOS) Server at testing.lo Port 80
HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0
SERVER_PORT=80
HTTP_HOST=testing.lo
DOCUMENT_ROOT=/var/www/html
SCRIPT_FILENAME=/var/www/cgi-bin/test.sh
REQUEST_URI=/cgi-bin/test.sh
SCRIPT_NAME=/cgi-bin/test.sh
HTTP_CONNECTION=keep-alive
REMOTE_PORT=43964
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/var/www/cgi-bin
SERVER_ADMIN=root@localhost
HTTP_ACCEPT_LANGUAGE=en-gb,en;q=0.5
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
REMOTE_ADDR=192.168.122.1
SHLVL=1
SERVER_NAME=testing.lo
SERVER_SOFTWARE=Apache/2.2.15 (CentOS)
QUERY_STRING=
SERVER_ADDR=192.168.122.40
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
HTTP_CACHE_CONTROL=max-age=0
HTTP_ACCEPT_ENCODING=gzip, deflate
REQUEST_METHOD=GET
_=/bin/env
正如您所看到的,HTTP_HOST
这是服务器的 URL(testing.lo
在本例中),您可以在脚本中使用它。
但是,这并不完全符合您/cgi-bin/test.sh
在 URL 中的请求。要解决此问题,您需要重定向。最简单的方法是启用该.htaccess
文件并对其进行配置。
找到/etc/httpd/conf/httpd.conf
该行<Directory "/var/www/html">
并向下滚动几行,直到看到以 开头的行AllowOverride
。确保其设置为All
。你应该有:
<Directory "/var/www/html">
...
...
AllowOverride All
...
...
</Directory>
现在创建一个文件/var/www/html/.htaccess
并添加以下内容:
RewriteEngine on
RewriteRule (.*) /cgi-bin/test.sh/$1 [L]
重新开始apache
:
service httpd restart
将浏览器指向服务器的 URL:http://<server name or IP>
。
您应该看到与之前类似的结果,但无需将脚本路径附加到 URL。另请注意,有一些环境变量会告诉您输入的 URL,以便您的脚本可以使用它们。
HTTP_HOST
是服务器的名称。
PATH_INFO
是附加到服务器的路径。 (如果您在浏览器中test
输入)。http://<server name or IP>/test
在您的bash
脚本中,您只需要使用这些变量,而不是按照您的问题建议解析脚本的参数。
但脚本不一定是bash
这样。使用您希望的任何语言,只要它可以访问传递给它的环境变量即可。