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

shu*_*wal 6 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]
Run Code Online (Sandbox Code Playgroud)

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

<link href="css/style.css" rel="stylesheet">
<script src="js/jquery-1.10.2.js"></script>
Run Code Online (Sandbox Code Playgroud)

和图像如:img/logo.png

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

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

Cro*_*ses 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]
Run Code Online (Sandbox Code Playgroud)

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


For*_*ien 6

只需在RewriteRule一行之前添加:

RewriteCond %{REQUEST_FILENAME} !-f
Run Code Online (Sandbox Code Playgroud)

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

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

RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$
Run Code Online (Sandbox Code Playgroud)

您可以添加更多以极 ( |)分隔的扩展名