2012-09-13 86 views
0

的mod_rewrite和结尾的斜杠

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

我已经挣扎了很多,但是我在正则表达式上很糟糕,而且我的头不能正常工作。

回答

3

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

对于第二个条件,你需要添加一个规则来处理:

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/,我猜测这并不是其中的一个地方。

您可以通过在你的页面的标题基本解决这个问题:

<base href="/"> 
+1

我只是输入相同的东西... – jeroen

+0

辉煌!谢谢 :) – Mattis

1

您需要使用您的资产(JS,图片等)

绝对路径要解决的第一个问题

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