2

我这样做的尝试是......

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule \.js$ js.php [L]   ## This line is the one I tried to add
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

如果我使用标签<script type='text/javascript' src='http://www.domain.net/myfile.js'></script>,我希望它通过js.php.

js.php 将使用处理文件header('....'); echo file_get_contents('myfile.js');

我已经尝试了很多事情来做到这一点,我之前在一个项目中做过这个,但我不记得现在在哪里我必须重做:)

希望它是有道理的...

4

1 回答 1

3

您可以添加以下重写规则:

RewriteRule ^([^\.]+)\.js$ js.php [NC,L]

代替:

RewriteRule \.js$ js.php [L]   ## This line is the one I tried to add

结果是:

http://www.domain.net/myfile.js => http://www.domain.net/js.php
http://www.domain.net/foo/bar/myfile.js => http://www.domain.net/js.php

或者您可以执行以下操作:

RewriteRule ^([^\.]+)\.js$ $1.php [NC,L]

结果是:

http://www.domain.net/myfile.js => http://www.domain.net/myfile.php
http://www.domain.net/foo/bar/myfile.js => http://www.domain.net/foo/bar/myfile.php

关于使用的RewriteRule 标志的一些解释:

  • NC:使用 [NC] 标志会导致 RewriteRule 以不区分大小写的方式匹配。也就是说,它不关心字母在匹配的 URI 中是大写还是小写。
  • L:[L] 标志导致 mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理更多规则。这对应于 Perl 中的最后一条命令,或 C 中的 break 命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。
于 2012-07-02T14:15:18.593 回答