.htaccess RewriteRule还重写了我的css,js和图像文件。怎么忽略这些?

时间:2015-01-13 13:36:51

标签: php .htaccess mod-rewrite url-rewriting

我想要当URL中的用户输入http://example.com/abc/123/jon/实际显示此文件http://example.com/abc.php?id=123&name=jon时,可以通过将这些行添加到htaccess文件中来轻松完成:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L]

但我的abc.php文件有一些(css,js)文件:

<link href="css/style.css" rel="stylesheet">
<script src="js/jquery-1.10.2.js"></script>

和图片如:img / logo.png

但由于我的.htaccess文件,它在这里搜索style.css:http://example.com/abc/123/jon/css/style.css 而不是http://example.com/css/style.css,类似于js和图像。

我已经在这里尝试过很多类似的答案,但没有一个能为我工作。我正在寻找.htaccess解决方案。

3 个答案:

答案 0 :(得分:11)

您可以使用:

RewriteEngine on
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.+)/(.+)/ abc.php?id=$1&name=$2 [L]

# rewrite css, js and images, from root
RewriteRule ^abc/[^/]+/[^/]+/(.+)$ $1  [L]

如果最终的css(或js)目录不是root用户,则可以在最后$1之前添加路径。现在它:/css/style.css /abc/xxx/yyy /css/style.css

答案 1 :(得分:2)

只需在RewriteRule一行之前添加:

RewriteCond %{REQUEST_FILENAME} !-f

这意味着如果您的请求uri指向现有文件,则下一个RewriteRule将不会触发。

如果你想要其他方式,那么这个应该做:

RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$

您可以添加以极点(|

分隔的更多扩展程序

答案 2 :(得分:-1)

@Croises的回答是正确的但我必须在$ 1之前添加我的完整domain_url

所以最后的答案是:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L]
RewriteRule ^abc/[^/]+/[^/]+(/.+)$ http://example.com/$1  [L]