繁体   English   中英

mod_rewrite和斜杠

[英]mod_rewrite and trailing slashes

我有

RewriteRule    ^([A-Za-z0-9-_≈]+)/?$    page.php?text=$1

可以将domain.com/sample_text匹配项转换为page.php?text=sample_text

但是,我希望以下两个条件也能起作用(并给出相同的结果)。

1)如果他们转到domain.com/sample_text/我想在地址栏中保留斜杠并显示page.php?text=sample_text (现在转到正确的页面,但是CSS和JS路径被弄乱了)。

2)如果他们转到domain.com/sample_text/worthlessdata123我想删除/之后的所有内容,并将domain.com/sample_text/保留在地址栏中,并显示page.php?text=sample_text

我已经挣扎了很多,但是我对正则表达式很不满意,而且我的头工作不正常。

您拥有的规则应足以满足第一个条件。 如果有人访问domain.com/sample_text/ ,则URI sample_text/匹配,并且应该在/page.php?text=sample_text处获取内容,而浏览器的URL地址栏保持不变。

对于第二种情况,您需要添加一条规则来处理:

RewriteRule ^([A-Za-z0-9-_≈]+)/.+$ /$1/ [L,R=301]

这将重定向: domain.com/sample_text/worthlessdata123domain.com/sample_text/ ,然后第一个规则应该从那里开始。


误读了您的第一个问题。 由于额外的斜杠,页面内容中的相对/绝对路径的基准有所不同。 当您具有类似<img src="images/blah.gif"> ,相对基数是从浏览器看到的URL派生的(不是服务器内部重写的内容)。 因此,如果浏览器看到: http://domain.com/sample_text : http://domain.com/sample_text ,则URI基为/ ,但是当浏览器看到http://domain.com/sample_text/ ,URI基为/sample_text/ ,即猜测并不是glike images/blah.gif所在的地方。

您可以通过在页面标题中添加基本内容来解决此问题:

<base href="/">

您需要通过为资产(JS,图像等)使用绝对路径来解决的第一个问题

对于第二个问题,您需要@Jon Lin的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM