2011-02-20 188 views
2

我试图添加一个尾部斜杠到使用PHP的网址。它不能与mod_rewrite的做,因为我有在.htaccess类似于此:将追踪斜杠添加到网址

RewriteRule ^page/(.*)$ index.php?page=$1 [L] 

,我想验证存在的页面之前的301重定向与斜线。

现在,我使用这个代码验证后:

if(substr($_GET['page'], -1) !== '/') 
    header('Location: http://example.com/'.$_GET['page'].'/'.$_SERVER['QUERY_STRING'],TRUE,301); 

但有没有更好的方法吗?

+0

我不明白你可以做一个国防部重写? – xzyfer

+0

我不想为不存在的页面添加尾部斜杠,例如example.com/page/fokwaofkw变成example.com/page/fokwaofkw/ – user422039

+0

而你如何检查该请求资源的存在? – Gumbo

回答

3

您已经有了最好的解决方案。我只想用$_SERVER['REQUEST_URI'],而不是已经被解析$_GET['page']$_SERVER['QUERY_STRING']

if (substr($_GET['page'], -1) !== '/') { 
    $parts = explode('?', $_SERVER['REQUEST_URI'], 2); 
    $uri = 'http://example.com'.$parts[0].'/'.(isset($parts[1]) ? '?'.$parts[1] : ''); 
    header('Location: '.$uri, true, 301); 
    exit; 
} 
+0

为什么不直接使用$ _SERVER ['REQUEST_URI']而不使用explode()?不应该产生相同的结果吗? –

+0

@Ibrahim AshShohail:'$ _SERVER ['REQUEST_URI']'包含最初请求的URI路径和查询。使用'explode',你可以在'?'分隔符处分割它,将丢失的'/'放在URI路径的末尾,如果查询已存在于最初请求的URI中,则重新追加查询。 – Gumbo

+0

我的不好...我认为REQUEST_URI会是“pages/1 /”,所以这首先打破了目的。 =)谢谢,Gumbo。 –

6

简单的方法是,如果可用,只是删除斜杠URL的末尾,并将其添加

$str = "http://yoursite.com/testpage"; 

OR 

$str = "http://yoursite.com/testpage/"; 


echo rtrim($str,"/").'/'; 
+0

你聪明的狗:-) –

+0

谢谢@Mike Q ;-) – Bunty

+0

简直棒极了 – Digitlimit