.htaccess RewriteRule 还重写了我的 css、js 和图像文件。如何忽略这些?

.htaccess RewriteRule also rewriting my css, js and images files. how to ignore these?

我希望当用户输入 http://example.com/abc/123/jon/ in URL is actually show this file http://example.com/abc.php?id=123&name=jon 时,这很容易通过将这些行添加到 htaccess 文件中来完成:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=&name= [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 和图像。

我已经在这里尝试过许多类似的答案,但是 none 为 me.i 工作的人正在为此寻找 .htaccess 解决方案。

你可以使用它:

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

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

如果您的最终 css(或 js)目录不在根目录下,您可以添加最后一个 </code> 之前的路径。现在是:<code>/css/style.css/abc/xxx/yyy/css/style.css

RewriteRule前加一行:

RewriteCond %{REQUEST_FILENAME} !-f

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

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

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

您可以添加更多由极点分隔的分机 (|)

@Croises 的回答是正确的,但我必须在 $1

之前添加完整的 domain_url

所以最后的答案是:

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