我如何找出网站代码所在的位置?


28

事实:

  • 有一个网站
  • 可通过www.example.org访问该网站
  • 有一个EC2实例很可能会保持网站
  • 服务器是Apache
  • 服务器操作系统是Ubuntu
  • 我对服务器拥有完全访问权限(和sudo特权)
  • 服务器是一团糟

问题是我不知道在哪里-简单地说-找到要加载的index.html / index.php。

我如何找出在哪里可以找到网站的PHP和HTML代码?有没有系统的方法来解决这个问题?


你知道域名吗?
the_velour_fog

9
是的,我在第二个要点中指出了这一点
拉斐尔

find / -name nameofsomefileonthewebsite.html
user253751'3

Answers:


53

首先,您应该检查服务器上托管了哪些网站

# apachectl -t -D DUMP_VHOSTS

然后,当您找到站点时,请检查选项DocumentRoot的相应配置文件。例如

# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
         port 80 namevhost 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
         port 80 namevhost gl-hooks.example.net (/etc/httpd/conf.d/hooks.conf:1)
                 alias example.net
                 alias www.example.net

您想知道网站example.net的位置

# grep DocumentRoot /etc/httpd/conf.d/hooks.conf
    DocumentRoot /vhosts/gl-hooks.example.net/

# cd /vhosts/gl-hooks.example.net/
# ls -la
total 4484
drwxr-xr-x  6 apache apache    4096 Feb 10 11:59 .
drwxr-xr-x 14 root   root      4096 Feb 23 08:54 ..
-rw-r--r--  1 root   root      1078 Dec 19 09:31 favicon.ico
-rw-r--r--  1 apache apache     195 Dec 25 14:51 .htaccess
-rw-r--r--  1 apache apache      98 Dec  7 10:52 index.html

还应该注意别名和重定向/重写

您还应该注意任何别名指令。例如具有以下设置

<VirtualHost *:80>
   ServerName example.net
   ServerAlias www.example.net
   ...
   DocumentRoot /vhosts/default/public_html/
   Alias /api/ /vhosts/default/public_api/
   ...
</VirtualHost>

当你将访问http://example.net/some.file.html - Apache会看文件在/虚拟主机/缺省的/的public_html /,同时与http://example.net/api/some.file .html文件将位于/ vhosts / default / public_api /。

关于重写/重定向,特别是编程式的(当重定向由某些php代码触发时),我认为没有找到这种情况的简便方法。


3
还应该注意别名和重定向/重写。
鲍勃,

3

尝试使用查找

find / -type f \( -iname "*index.html*" -o -iname "*index.php*" \) 2> /dev/null

否则,假设已从Ubuntu存储库安装了Apache,请查看/etc/apache2/sites-available,即

grep -niR "thedomainname" /etc/apache2/sites-available

如果网站上定义了apache VHOST,则可能会找到配置文件,然后在该文件中查找,"documentroot"这应该告诉您源代码的位置


1
好吧...我“做了”-花了2个小时,服务器几乎停止响应,我发现67个index.html和几乎一样多的index.php。因此,这种方法对我而言并非如此。
Raffael

2
在这种情况下使用find确实是一个坏主意
ALex_hha '16

1
大概你应该使用的网站,而不是启用
ALex_hha

1
index.html并不是一个很好的文件。有一些CMS在每个目录中放置一个CMS,以防Apache中未关闭目录列表,因此它将始终加载空白页面而不显示目录内容。
gabe3886 '16

@the_velour_fog不,这在这里非常关键,但是-type f仅适用-iname "*index.html*"于您的命令。应该是-type f \( -iname "*index.html*" -o -name "*index.php*" \)

2

对于调试网站(或与此相关的任何过程)可能有用的另一种方法是使用lsof(可能不在路径中,通常在中找到/sbin/lsof

lsof -s [PID] 将列出给定进程可以处理的所有文件,并且对于确切地查看正在使用的文件可能很有用(这包括您的html / php文件以及站点所需的日志文件和库)


1

我不知道在哪里...找到要加载的index.html / index.php。

查找页面源文件

一种方法是浏览站点以找到一个更独特的页面-可以说newcontactform.php-理想情况下,该页面不太可能出现在同一服务器托管的其他站点中。

然后可以尝试

locate newcontactform.php

如果失败,请遵循

find / -name newcontactform.php

这应该会产生很少的候选人名单。

然后,您可以检查文件,进行比较,并在必要时尝试进行一些小的更改(例如,插入HTML注释),以验证文件确实生成了页面。

查找配置

有时,配置文件在ps命令的输出中很明显。最坏的情况是,ps -ef | grep -e 'apache|httpd'但更创造性地使用ps选项可能值得探索。

您可以httpd.conf在Ubuntu和Apache httpd项目(可能有所不同)的典型位置中查找,也可以仅使用locatefind

有时,主配置文件引用虚拟主机的其他配置文件。您可以通过识别主配置文件来解决此问题。

慢性病例

有时,旧服务器运行各种Web服务器守护程序。在这种情况下,可能需要一段时间才能找到它们,然后计算出它们的配置文件在哪里。上述技术的组合最终应会成功。

您可以使用来找到正在80端口等上监听的程序 netstat -lntp。通常,查找二进制文件是指向包含配置文件的目录树的有用指针。


1

您可以在Web服务器的(Apache)配置文件-httpd.conf(最有可能位于/ etc /中)中检查要查找的域的Vhost,只需打开该文件并滚动浏览,直到找到VirtulaHost指令即可。您的域,在那里您将看到DocumentRoot指令-这是您网站的文档根目录,您可以在其中找到应用程序的文件。


1

请到

cd / etc / apache2 / site-avaliable /

在这里您将找到您的配置文件(即:000-default.conf)

请使用以下方式打开此文件/打开您的配置文件

vi 000-default.conf

您将在此处找到DocumentRoot,这是您网站的代码

这也是Default conf文件,同样,您将获得一些conf详细信息,请同时检查这些内容。


3
这是系统相关的。
与莫妮卡(Monica)进行的轻度比赛

除了@PreferenceBean的注释之外,这只会显示默认虚拟主机的配置。那里可能有许多带有无用名称的虚拟主机,这些
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.