提问人:Bhavesh G 提问时间:10/14/2012 最后编辑:Bhavesh G 更新时间:1/7/2022 访问量:52325
URL 重写:css、js 和图像未加载
URL rewriting : css, js, and images not loading
问:
我有以下规则.htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1
它将 URL 重定向到 。页面重定向成功,但问题是没有加载,http://localhost/detail/123
http://localhost/detail.php?id=123
CSS, JS, and images
CSS、js 文件位于 和http://localhost/css/
http://localhost/js/
一种解决方案是使用绝对路径(例如/CSS或/js,而不仅仅是CSS/,/js,但这似乎不是一个可靠的解决方案,因为我们必须在所有文件上更改它,
任何其他基于规则的解决方案,独立于编辑所有PHP文件,让我们使用“相对路径”?.htaccess
答:
一种解决方案是使用绝对路径(例如/css或/js,而不仅仅是css/,/js,但这看起来不是一个可靠的解决方案,因为我们必须在所有文件上更改它,
这是因为相对 URI 的基数已更改。本来基数是当页面是,浏览器会适当地用基数填充相对链接。但是,当浏览器转到一个页面时,就像 base 突然变成一样,它试图将其附加到所有相对 URL 的前面,因此它们都没有加载。/
/detail.php?id=123
/
/detail/123
/detail/
您可以将链接设置为绝对链接,也可以更改页面标题中的 URI 基数(在标签之间):<head> </head>
<base href="/">
评论
.htaccess
<base href="/project/">
不要偷懒,将资源中的相对 URI 更改为根目录绝对路径,例如 。这是最好的。/css/style.css
你可以变得聪明,使用正则表达式并替换你需要的所有文件,这就像几个行,你就完成了。有多少地方可以改变?你应该使用一个模板。
这应该有效,但我不会走这条路。
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
评论
http://example.com/css/style.css
/css/style.css
安东尼的回答是完全有效的,他实际上是在试图传授一些好的做法。
但是,由于您似乎对这个答案不满意,因此这里有一个不同的解决方案。只需在任何 Rewrite-Command 之前将此行插入 .htaccess 中:
RedirectMatch permanent ^/detail/((css|js)/.*) /$1
它会将所有最初对 /details/css/style.css 和 /details/js/js.s 的 404 个请求重定向到它们的实际位置。既不漂亮也不优雅,但它只是工作。
我在核心 php 中将 url 重写应用于一个项目。我遇到了同样的问题。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]
这段代码非常适合我,在重定向规则之前添加(RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1)
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
只需排除目录,它就会自动加载,仅此而已
RewriteRule ^(css|js|fonts|images|plugins)($|/) - [L]
当我将样式链接从
<link href="css/styles.css" rel="stylesheet" />
到<link href="/css/styles.css" rel="stylesheet" />
评论
/var/www/css/
http://localhost/css/style.css
http://localhost/js/js.js