将script.js重定向到script.php

时间:2010-07-22 23:49:02

标签: apache .htaccess

我有一些由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吗?

3 个答案:

答案 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>