我有一些由PHP生成的javascript。目前我使用
在html中包含javeascript<script type="text/javascript" src="js/script.php">
但我想用
<script type="text/javascript" src="js/script.js">
现在script.js不存在,但是我希望它在没有用户知道的情况下重定向到script.php。
可以用.htaccess吗?
答案 0 :(得分:6)
如果您的网络服务器支持mod_rewrite
,您可以执行以下操作:
RewriteEngine On
RewriteRule ^js/script\.js$ js/script.php
如果您有多个脚本,可以使用测试模式中的反向引用来概括RewriteRule
:
RewriteRule ^js/(.*)\.js$ js/$1.php
答案 1 :(得分:0)
如果您只想让脚本src以“.js”结尾,您可以将其保留为.php文件并将其链接为:
<script type="text/javascript" src="js/script.php?name=script.js">
此技术通常与php或其他生成图像的脚本一起使用:
<img src="images/thumbnailer.php?x=foo.jpg">
这样,如果浏览器尝试通过“扩展名”确定文件类型,它将被“欺骗”为使用正确的格式。
答案 2 :(得分:0)
在父目录中,您可以使用.htaccess将所有资产文件映射到相关的php文件。
RewriteEngine on
RewriteRule ^js/(.*)\.js$ js/$1.js.php
RewriteRule ^css/(.*)\.css$ css/$1.css.php
注意我保留了文件扩展名以提高可读性。
htdocs
mysite
assets
.htaccess
js->
script.js.php ( http://locahost/mysite/assets/js/script.js )
css->
style.css.php ( http://locahost/mysite/assets/css/style.js )
默认情况下,文件将以php格式输出,您必须将内容类型标题更改为正确的类型(js,css,txt,xml等)。
您可能还希望禁用缓存的文件,因为它们很可能经常更改。
您可以在所有php文件或.htaccess文件中执行此操作。
PHP
内容类型
js/*.js.php -> header("Content-type: text/javascript");
css/*.css.php ->header("Content-type: text/css");
缓存
*.php -> header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
*.php -> header('Pragma: no-cache'); // HTTP 1.0.
*.php -> header('Expires: 0'); // Proxies.
<强>的.htaccess 强>
内容类型
<FilesMatch \.js.php$>
Header set Cache-Control "no-transform"
Header set Content-Type "application/javascript; charset=utf-8"
</FilesMatch>
<FilesMatch \.css.php$>
Header set Cache-Control "no-transform"
Header set Content-Type "text/css; charset=utf-8"
</FilesMatch>
缓存
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>