我想通过PHP脚本来提供我的JavaScript文件。
一个例子是:
如果我要请求一个名为dir/my_file.js的JavaScript文件
服务器应该将请求redirect到名为my_script_server.php?src=dir/my_files.js的处理程序脚本my_script_server.php?src=dir/my_files.js
我如何在Apache中做到这一点?
类似这样的事情可能是你在做什么:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(dir/.*\.js)$ my_script_server.php?src=$1 [L,QSA] </IfModule>
结束-f和-d确保文件不在那里,最终规则查找与文件夹dir/中的.js文件匹配的请求,并将其透明地发送到您的php脚本。
我已经修改了从我躺在一个htaccess文件的代码,但它会是相似的,如果你把它放到httpdconfiguration文件我相信。
有关mod_rewrite模块上Apache 文档的更多信息。
你可以从一个PHP文件服务脚本 – 这从ASP正常工作,所以应该是相当好的PHP。
我通常在文件名中保留“.js”,所以我知道什么是一目了然,如“some_dynamic_script.js.asp”或在您的情况下“some_dynamic_script.js.php”。 然后,只要确保脚本输出格式正确的JavaScript响应,并以通常的方式包含它,就像<script type="text/javascript" src="some_dynamic_script.js.php"> – 你甚至可以在querystring上传递选项如果需要,PHP代码可以做出反应,比如<script type="text/javascript" src="some_dynamic_script.js.php?option1=value1&option2=value2&option3=value3"> 。
如果您可能将代码分发给其他人或将其安装在不受控制的系统上,则这比mod_rewrite更具优势,因为您没有额外的安装步骤(将重写控件添加到apacheconfiguration或.htaccess中,如果主机没有启用mod_rewrite,这可能不起作用)。
我记得有一些旧的浏览器不喜欢javascipt没有正确的MIMEtypes服务的问题,所以请确保您设置此header("Content-Type: text/javascript"); 以防万一(否则响应将可能是服务器为默认的文本/ HTML) – 虽然我刚刚注意到我的一些代码没有这样做,它在IE6 / 7/8,FF2 / 3 / 3.5 / 3.6和至less一个版本的Chrome。
需要注意的一个主要问题是,无论您是直接使用mod_rewrite还是php,当然如果php代码对查询string或应用程序数据库的input做任何事情,您都需要像所有代码一样确保数据被正确地筛选以避免潜在的注入和XSS攻击。
另一个更小的问题是caching控制。 PHP处理器将默认将输出标记为始终需要重新请求,其中对于普通的JS文件,如果浏览器指示先前已经提交了相同的请求,则Apache可以返回“304未修改”响应,如果脚本返回不会改变可能会浪费您的带宽,并使远程用户的响应速度变慢。 如果您的应用程序始终托pipe在HTTPS上(因为无论如何都不应通过HTTPS进行caching),但这可能是通过HTTP切断大块脚本的考虑因素,因此这不是问题。 如果这对你来说可能是一个问题,你可以操纵caching控制来重新获得它的优势。
综合使用:
从PHP文件的顶部发送一个头,使浏览器认为这是真正的JavaScript
header('Content-Type: application/javascript');
真正好的部分是你可以添加dynamic内容到服务器的'JavaScript文件',就像这样,从PHP传递到JavaScript的环境:
var environment = <?=getenv('APPLICATION_ENV');?> // More JS code here ...