0

我有

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

把热门歌曲翻译domain.com/sample_textpage.php?text=sample_text

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

1)如果他们去domain.com/sample_text/我想在地址栏中保留斜杠并显示page.php?text=sample_text(现在它进入正确的页面,但 css 和 js-paths 搞砸了)。

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

我已经很挣扎了,但是我在正则表达式方面很糟糕,而且我的脑袋也不能正常工作。

4

2 回答 2

3

您拥有的规则应该足以满足第一个条件。如果有人访问domain.com/sample_text/,则 URIsample_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,则 URI 基数是/,但是当浏览器看到 时http://domain.com/sample_text/,URI 基数变为/sample_text/,我猜这不是类似的东西images/blah.gif所在的位置。

您可以通过在页面标题中包含基础来解决此问题:

<base href="/">
于 2012-09-13T01:47:28.320 回答
1

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

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

于 2012-09-13T01:49:04.840 回答