如何动态托管任何域而不专门为其创建文件夹?

如何动态托管任何域而不专门为其创建文件夹?

假设一个域名已指向我的服务器的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这样。使用您希望的任何语言,只要它可以访问传递给它的环境变量即可。

相关内容