我有
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-path混乱了)。
2)如果他们转到domain.com/sample_text/worthlessdata123
我想删除/之后的所有内容,将domain.com/sample_text/
保留在地址栏中并显示page.php?text=sample_text
。
我已经挣扎了很多,但我在正则表达式上很糟糕,而且我的头脑无法正常工作。
答案 0 :(得分:3)
你所拥有的规则应该足以满足第一个条件。如果有人转到domain.com/sample_text/
,则URI sample_text/
会匹配并且应该在/page.php?text=sample_text
处提供内容,而浏览器的网址地址栏保持不变。
对于第二个条件,您需要添加一个规则来处理:
RewriteRule ^([A-Za-z0-9-_≈]+)/.+$ /$1/ [L,R=301]
这会将domain.com/sample_text/worthlessdata123
重定向到domain.com/sample_text/
,然后第一条规则应该从那里开始。
误读你的第一个问题。由于额外的斜杠,您在页面内容中的相对/绝对路径获得了不同的基础。当你有类似<img src="images/blah.gif">
的东西时,相对基数来自浏览器看到的URL(而不是服务器内部重写的内容)。因此,如果浏览器看到:http://domain.com/sample_text
,则URI基数为/
,但当浏览器看到http://domain.com/sample_text/
时,URI基数变为/sample_text/
,我猜测它不是'在某些地方g images/blah.gif
居住的地方。
您可以通过在网页标题中加入基数来解决此问题:
<base href="/">
答案 1 :(得分:1)
使用资产的绝对路径(js,图像等)需要解决的第一个问题
对于第二个问题,你需要@Jon Lin的解决方案。