.htaccess在文件不存在时重定向

时间:2012-08-23 21:35:37

标签: apache .htaccess mod-rewrite

我正在使用.htaccess将用户重定向到我的主控制器,它运行正常。但是当我调用一个不存在的js文件时,如:

<script src="/js/jquery1231231312.js"></script>

而不是只说404 - 文件不存在,这个js文件正在获取index.php的内容。我该怎么办?

这是我的.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

1 个答案:

答案 0 :(得分:6)

嗯,你设置它的方式,一切都通过index.php路由。如果对不存在的资源发出请求,则会通过index.php进行路由。这取决于index.php实现某些不存在的东西,并返回404错误,但我猜它的设置是为了在url=不存在的情况下返回主页。

您可以更改规则以忽略某些文件的路由,例如:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

这样就可以使/js目录中的任何内容都不会通过index.php进行路由,因此如果有人请求/js目录中的不存在的文件,它们只会得到定期的404响应。


编辑:

  

这就是我想要的,忽略某些文件(js,css,images)的路由,因为如果文件不存在,我会得到正常的错误!

如果你想忽略所有图像,javascript和css,那么第二行应该是:

RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js)$ [NC]