22

我有以下规则.htaccess

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1

http://localhost/detail/123它将URL重定向到http://localhost/detail.php?id=123. 页面重定向成功,但问题是CSS, JS, and images没有加载,

CSS、js 文件位于http://localhost/css/http://localhost/js/

一种解决方案是使用绝对路径(例如 /CSS 或 /js 而不仅仅是 CSS/、/js,但这似乎不是一个可靠的解决方案,因为我们必须在所有文件上更改它,

任何其他基于规则的解决方案.htaccess,它独立于编辑所有 PHP 文件并让我们使用“相对路径”?

4

7 回答 7

24

一种解决方案是使用绝对路径(例如 /css 或 /js 而不仅仅是 css/、/js,但这看起来不是一个可靠的解决方案,因为我们必须在所有文件上更改它,

这是因为您的相对 URI 的基数已更改。原来,base 是/当页面为 时/detail.php?id=123,浏览器正确填写与/base 的相对链接。但是当浏览器进入一个像/detail/123base 这样的页面时/detail/,它会尝试将其附加到所有相关 URL 的前面,因此它们都不会加载。

您可以将链接设为绝对链接,也可以更改页面标题中的 URI 基础(在<head> </head>标签之间):

<base href="/">
于 2012-10-14T22:31:48.317 回答
20

不要偷懒,将资源中的相对 URI 更改为根目录绝对路径,例如/css/style.css. 这是最好的。

您可以变得聪明并使用正则表达式并替换您需要的所有文件,这就像几条衬里一样,您就完成了。有多少地方可以改变?你应该使用模板。

这应该可行,但我不会这样。

RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]

于 2012-10-26T19:24:57.020 回答
7

我将 url 重写应用于核心 php 中的一个项目。我遇到了同样的问题。css、Js 和图像没有被加载。我使用了它,它对我有用。资源

# Allow any files or directories that exist to be displayed directly
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
于 2013-09-30T20:10:18.340 回答
1

安东尼的回答是完全有效的,他实际上是在尝试在那里传授一些好的做法。

但是,由于您似乎对该答案并不满意,因此这里有一个不同的解决方案。只需在任何重写命令之前将此行插入到您的 .htaccess 中:

RedirectMatch permanent ^/detail/((css|js)/.*)  /$1

它将所有最初对 /details/css/style.css 和 /details/js/js.s 的 404 请求重定向到它们的实际位置。既不漂亮也不优雅,但它确实有效。

于 2012-10-27T23:12:25.027 回答
0

只是排除目录它会自动加载就是这样

RewriteRule ^(css|js|fonts|images|plugins)($|/) - [L]
于 2020-06-18T12:45:10.843 回答
0

这段代码非常适合我,在重定向规则之前添加(RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1)

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
于 2017-08-04T07:57:15.383 回答
0

当我更改样式链接时,我的问题解决了

 <link href="css/styles.css" rel="stylesheet" />

进入 <link href="/css/styles.css" rel="stylesheet" />

于 2022-01-07T08:15:38.713 回答