2014-04-24 483 views
0

我設法根據我從數據庫中獲得的值更改URL。 在我的網址我需要通過文章的ID和文章的標題是這樣的。友好的URL

$articleId=123; 
$articleTitle='First Article'; 
echo '<a href="'.$articleId.'&'.str_replace(" ","-",$articleTitle).'">Read More</a>'; 
在我htaccess文件

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) display.php?id=$1&$2 

然後在我Display.php的使用將Get方法獲取文章ID。 但我的問題是,當我看到它顯示的是這樣的URL。

http://localhost/News/123&First-Article 

但我需要顯示這樣的網址。

http://localhost/News/First-Article 

並在Display.php文件上顯示文章詳細信息。 希望我已經清楚地解釋了這個問題。請指教。 在此先感謝。

+0

你需要有一個獨特的標題,那麼'http:// localhost/News/123/First-Article'呢? –

+0

你將需要一個獨特的新聞報道的價值,並從url中刪除'123'意味着它將不能被用作識別文章的參考。 – Howli

+0

@AbdouTahiri:獨特的標題可以完成。但有沒有什麼辦法可以像上面那樣做?並且像你所建議的那樣更改網址將是第五種選擇。 –

回答

0

我說你只需要改變這一點:

RewriteRule (.*) display.php?id=$1&$2 

到:

RewriteRule ^(.+)[&](.+)$ display.php?id=$1/$2 
+0

查詢字符串已經被剝離,所以你不會在RewriteRule中看到它。 –

+0

@PhilPerry在OP的問題中沒有提示查詢字符串。有一個錨點指向一些資源。所以:_what_查詢字符串? – arkascha

+0

您在重寫模式中使用**&**指的那個。那還有什麼? –

0

你需要傳遞只有標題

echo '<a href="'.str_replace(" ","-",$articleTitle).'">Read More</a>'; 

在.htaccess

RewriteRule (.*) display.php?id=$1 

所以$_GET['id']會直接把你的文章標題。

0

你可以嘗試像

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /News/(.*)&(.*)\ HTTP 
RewriteRule^/News/%2/%3? [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^News/(.*)/(.*)$ /News/$1&$2 [L] 

它將顯示http://localhost/News/123&First-Articlehttp://localhost/News/123/First-Article

編輯:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)&(.*)\ HTTP 
RewriteRule^/%2/%3? [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ /News/$1&$2 [L] 
+0

在這一個,我們需要新聞文件夾嗎? –

+0

在重定向到的網址中? – Howli

+0

當我喜歡它說對象未找到錯誤消息,爲什麼? –

0

據我問的問題,最合適的答案會是保持唯一的文章名稱。

$articleTitle='First Article'; 
echo '<a href='.str_replace(" ","-",$articleTitle).'">Read More</a>'; 

並在您的.htaccess文件

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) display.php?id=$1 

那麼URL會像我想要的。

0

在數據庫中創建表「article_url_name」一欄,利用此功能在你的數據庫中創建的文章的URL名稱和商店。

function make_url_name($title){ 
    $result = ""; 

    $str = strtolower(stripslashes($str)); 
    $str = preg_replace("/ /i", "-", $str); 

    for($n = 0; $n < strlen($str); $n++){ 
     if(preg_match("#^[a-z0-9-]+$#", $str[$n])) 
      $result .= $str[$n]; 
    } 

    // Removing multiple ---- 
    $result = preg_replace("/-----/i", "-", $result); 
    $result = preg_replace("/----/i", "-", $result); 
    $result = preg_replace("/---/i", "-", $result); 
    $result = preg_replace("/--/i", "-", $result); 
    return $result; 
} 

把這個就像你htaccess文件

RewriteRule ^news/([a-zA-Z0-9-]+)$ articles.php?url_name=$1 [NC,L] 

在「的文章。PHP的」文件獲取URL名稱這樣$ _GET [‘URL_NAME’];

這URL_NAME數據庫中的表匹配到‘article_url_name’列,並顯示文章內容

0

如果您傳入。 URI是

/News/First-Article 

,你想你的網站上看到

/display.php?id=First-Article 

你的.htaccess將

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^News/([^/]+)/? /display.php?id=$1 [L] 

如果「第一條」是不夠獨特,你需要沿着你的URI的唯一標識符進行:

/News/123/First-Article 

,你想你的網站上看到

/display.php?id=123&title=First-Article 

你的.htaccess將

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^News/([^/]+)/([^/]+)/?$ /display.php?id=$1&title=$2 [QSA,L] 

你可以省略標題,如果它沒有用於定位文章。 QSA標誌將保留任何現有的傳入查詢字符串變量(並且只添加標識和標題)。