URL重写:css,js和图像未加载

我遵循以下规则.htaccess

Options +FollowSymLinks

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

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

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

CSS,js文件位于和http://localhost/css/http://localhost/js/

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

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


答案 1

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

这是因为您的相对 URI 的基础已更改。最初,基数是当页面是 时,浏览器会正确填充与基数的相对链接。但是,当浏览器转到像base这样的页面时,它突然变得,并尝试将其附加到所有相对URL的前面,因此它们都没有加载。//detail.php?id=123//detail/123/detail/

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

<base href="/">

答案 2

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

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

这应该有效,但我不会走这条路。

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


推荐