2015-10-20 96 views
2

我正在开发一个项目,其中http://www.mywebsite.com/index.html位于/var/www/public,这是文档根目录(根据/etc/apache2/sites-available/000-default.conf)。我在/var/www/js中有我想在我的/var/www/public/index.html文件中引用的javascript文件。这是我迄今为止所尝试的可能参考文档根目录下的javascript文件吗?

<script src="/js/js_file.js"></script> 
- 
<script src="js/js_file.js"></script> 
- 
<script src="../js/js_file.js"></script> 
- 
<script src="../../js/js_file.js"></script> 

这些都不起作用。

如何在文档根目录之外引用javascript文件?

+1

你可以这样做,就像黑客可以随意访问你的文件系统一样。 – spender

+2

允许客户端访问文档根目录以外的文件是一个重大的安全风险 - 这就是web服务器软件默认阻止它的原因。 – adelphus

+0

我想它会引起另一个问题,这在我看来就像是一个误解,然后是@adelphus。你应该把文件放在你的文档根目录之外吗?我认为将它们放在那里会为这些文件创建更多的安全性。那是错的吗? – aCarella

回答

1

您可以通过向Apache配置添加重写规则来实现此目的。 See the apache url rewrite guide。这个想法是将内部目录映射到用户输入的url字符串。

事情是这样的:

RewriteCond %{HTTP_HOST} \.mywebsite\.com$ 
RewriteRule ^/js/(.*)\.js$ var/www/js/$1 

将允许公众用户通过公共URL mywebsite.com/js/test.js达到无功/网络/ JS/test.js。

+0

很高兴知道,如果我需要这样做,我可以使用它。 – aCarella

0

您可以添加FollowSymLinks(See this thread),并将符号链接到docroot中的js文件夹(也许在/ var/www/public/js)。

实际上,你正在别名js,所以它根本不在docroot之外。

+1

*所以它根本不在docroot之外* - 这是一种看待它的坏方法。允许Web服务器上的符号链接完全消除了文档根目录限制的好处,因为您可以将符号链接到文件系统的任何位置 - 将它错误并且系统处于非常脆弱的状态。 – adelphus

+0

非常好的一点!考虑到OP首先提出这个问题,在这种情况下肯定应该强调安全。 –