带有斜杠的 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 路径的主要内容,如果未能解决你的问题,请参考以下文章

mod_rewrite:删除尾部斜杠(只有一个!)

带有 nginx 的 Gatsby - 重定向被破坏 - 尾随 /(斜杠)

删除多个尾随斜杠 mod_rewrite

mod_rewrite 和双斜杠问题

url 编码的正斜杠破坏了我的 codeigniter 应用程序

带有 CSS 显示的元素:无;破坏布局 - 导致错位