2011-02-20 189 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