我遵循.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文件并让我们使用“相对路径”?
答案 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