【问题标题】:.htaccess RewriteRule also rewriting my css, js and images files. how to ignore these?.htaccess RewriteRule 还重写了我的 css、js 和图像文件。如何忽略这些?
【发布时间】:2016-10-10 19:55:32
【问题描述】:

我希望当用户在 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 解决方案。

【问题讨论】:

  • 在 css 和 js 前加 / 告诉浏览器从根目录开始查找那些文件
  • 是的,它正在工作,但我想要一个 .htaccess 解决方案而不是这个。
  • stackoverflow.com/a/3701958/3492835。 @Pinoniq 是对的。

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


【解决方案1】:

你可以使用它:

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)目录不在根目录下,您可以在最后一个 $1 之前添加路径。现在是:/css/style.css/abc/xxx/yyy/css/style.css

【讨论】:

  • 如果css/abc/ 在同一个文件夹中,通常不需要这样做。但重要的是它有效。我建议您尽可能使用 html:&lt;base href=""&gt;。但我看到你已经删除了你的消息......
  • 如果你对 root 有问题,我会更改我的最终 (.+)
【解决方案2】:

RewriteRule前加一行:

RewriteCond %{REQUEST_FILENAME} !-f

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

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

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

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

【讨论】:

  • 你不能这样做,因为这些不是虚拟目录中的真实文件。
  • 这很好用。但是,如果这不起作用,那么您可能会发现在许多 Web 服务器上,当涉及到文件名时,它们是区分大小写的。例如,如果您的代码将文件引用为“sitenavigation.php”并且该文件称为“siteNavigation.php”,那么重写会将文件视为丢失并因此重写它。
【解决方案3】:

@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]

【讨论】:

  • 它只是为了更新、总结和最终答案我已经接受了你的答案,也给了你学分。
  • example.com// 左起第一个正则表达式之后,您有 2 x / 的错误......
猜你喜欢
  • 2011-06-20
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2023-04-05
  • 2012-01-16
相关资源
最近更新 更多