我下面的规则.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文件,让我们用“相对路径”的?
不要偷懒,改变你的相对URI在你的资源。 这是最好的。
你可以弄巧,并使用正则表达式替换所有你需要的是像一个为数不多衬垫的文件,你就大功告成了。 有多少地方莫不是改变? 你应该使用的模板。
这应该工作,但我不会走这条路。
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
一个解决方案是使用绝对路径(例如/ CSS或/ JS,而不是仅仅的CSS /,/ JS但由于我们改变它的所有文件,这是不是看起来可靠的解决方案,
这是因为你的相对URI有自己的基地改变。 原来,基地/
页面时/detail.php?id=123
,浏览器与相对链接,适当填充/
基地。 但是当浏览器进入到像页/detail/123
基部突然变得/detail/
和它试图附加在所有相对URL的前面,因此没有一个加载。
你可以让你的链接是绝对的,或在您的网页的标题更改URI基地(插图中的<head> </head>
标记):
<base href="/">
我申请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]
安东尼的回答是完全有效的,并且他实际上是试图传授一些好的做法存在。
但是,因为你似乎并不满足于这个问题的答案,这里是一个不同的解决方案。 只需插入此行到任何重写命令之前,你的.htaccess:
RedirectMatch permanent ^/detail/((css|js)/.*) /$1
这将重定向所有/details/css/style.css和/details/js/js.s自己的实际位置,原本404个请求。 无论particluarly漂亮也不优雅,但它只是工作。
此代码对我很好地工作,重定向规则前添加(重写规则^细节/([0-9] +)/ $ detail.php?ID = $ 1)
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]