带有斜杠的 mod_rewrite 会破坏 CSS/IMG/SCRIPTS 路径
Posted
技术标签:
【中文标题】带有斜杠的 mod_rewrite 会破坏 CSS/IMG/SCRIPTS 路径【英文标题】:mod_rewrite with Trailing Slash breaks CSS/IMG/SCRIPTS paths 【发布时间】:2011-10-11 16:18:41 【问题描述】:我正在尝试使 mod_rewrite 成为 url 中的第一个子目录字符串,以便在类/db 中创建与“jsfiddle.net 保存的 url”类似的功能。该脚本运行良好并进行了重写。
例如网址
http://jsfiddle.net/RyEue/
这很好用(加载所有 css、脚本等):
http://www.domain.com/787HHJ2
这是我过去使用的方法。
问题在于以最后一个斜杠、脚本、css 和其他松散路径结束 URL 时。
http://www.domain.com/787HHJ2/
重写脚本:
DirectoryIndex index.php index.html
Options +FollowSymlinks
RewriteEngine On # Turn on the rewriting engine
#RewriteBase /
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %QUERY_STRING !.
RewriteRule ^.+/?$ index.php [QSA,L]
不确定这是否与 Rewritebase 有关,我尝试了多种方法。
PS。我尝试将路径设置为绝对路径(例如 src="/img/theimage.jpg"),但没有运气。
【问题讨论】:
规则没问题。请打开重写调试 (RewriteLogLevel 9
) 并检查重写日志,看看到底发生了什么。
@LazyOne,你的权利。有用。问题是它破坏了 css、脚本路径。
我已经澄清了这个问题。问题主要在于 css、脚本、图像和其他在使用尾随 / 时被破坏。
“休息”是什么意思?尝试%DOCUMENT_ROOT%REQUEST_URI
而不是%REQUEST_FILENAME
。顺便说一句,RewriteCond %QUERY_STRING !.
是什么意思——仅当查询字符串为空时?
“中断”是指像 img 这样的 html 元素在重写后不会加载。是的,只有查询字符串为空。我正在尝试显示 index.php 及其所有元素。
【参考方案1】:
1。确保你有相对于根文件夹链接的 css/images/js 等(带有前导斜杠):/styles/main.css
2。在当前规则之前添加以下规则之一:
# do not touch files with .css/.js/.jpg etc extensions
RewriteRule \.(css|js|jpg|png|gif)$ - [L]
或
# do not touch any resources in images/css/js folders
RewriteRule ^(images|css|js)/ - [L]
3。清除浏览器缓存并重新启动(有时浏览器可能会在重写规则被修复时显示缓存的页面/资源,这会带来很多混乱。
【讨论】:
通过上面的答案,我能够解决问题。到 root 的相对路径加上设置本地虚拟主机的组合使一切都能完美运行。【参考方案2】:尝试转义
RewriteRule ^.+\/?$ index.php [QSA,L]
【讨论】:
以上是关于带有斜杠的 mod_rewrite 会破坏 CSS/IMG/SCRIPTS 路径的主要内容,如果未能解决你的问题,请参考以下文章
带有 nginx 的 Gatsby - 重定向被破坏 - 尾随 /(斜杠)