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

时间:2012-10-14 14:43:31

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

我遵循.htaccess

的规则
Options +FollowSymLinks

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

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

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

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

一种解决方案是使用绝对路径(ex / CSS或/ js而不仅仅是CSS /,/ js,但这似乎不是一个可靠的解决方案,因为我们要在所有方面进行更改文件,

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

6 个答案:

答案 0 :(得分:20)

  

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

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

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

<base href="/">

答案 1 :(得分:18)

不要懒惰并更改资源中的相对URI。这是最好的。

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

这应该有效,但我不会这样做。

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:1)

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

但是,由于您似乎对该答案不满意,因此这是一个不同的解决方案。只需在任何Rewrite-Command之前将此行插入.htaccess:

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

它会将/details/css/style.css和/details/js/js.s的所有原始404请求重定向到其实际位置。既不是特别漂亮也不优雅,但它只是有效。

答案 4 :(得分:0)

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

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]

答案 5 :(得分:0)

仅排除目录,它将自动加载

x.index.quarter