これは、URL書き換えおよび文字列からIDへのアルゴリズムに関する問題です。
何よりも、リライトモジュールによってURLが変更されても、ブラウザバーのURLには常にidやstring(ニュースについて)などの投稿パラメータが含まれていることに注意してください。
さて、質問に移りましょう。私たちの目的は、URLを書き直すことです。
http://localhost/DIRECTORY/AID/news/this_is_article_title
に:
http://localhost/DIRECTORY/AID/news.php?a_id=24
リライトモジュールでは、次のようにしかリライトできません。
http://localhost/DIRECTORY/AID/news.php?title=this_is_article_title
これがhtaccessの部分で、 htaccess-online-testerで実際にテストされています
RewriteRule ^DIRECTORY/AID/news/([A-Za-z0-9_]+)$ DIRECTORY/AID/news.php?title=$1 [QSA,L]
残りの作業は、タイトルをニュースにマッピングするためのアルゴリズムを構築することです。これは、書き換えモジュールでは役に立ちません(特に、URLを1つずつ手動で書き換えます)。以下のphpコードを使用できます。
<?php
//write url reflect to news title.
function build_news_url_by_title(){
$query = "SELECT * FROM news ORDER BY id DESC LIMIT 5";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo "<a href=\"news/".strtr(substr($row['title'], 0,26), " ", "_")."\">".substr($row['title'], 0,26)."</a>";
}
}
function get_news_by_title($title){
$real_title = strtr($title, "_", " ");
$query = "SELECT * FROM news WHERE title LIKE %".$real_title."% LIMIT 1";
return mysql_query($query) or die(mysql_error());
}
$title = $_POST['title'];
$news = get_news_by_title($title);
//some code return the news
...
したがって、URL:
http://localhost/DIRECTORY/AID/news/this_is_article_title
私たちにもニュースを与えることができます。
最後に、上記の手順から、urlと入力すると
http://localhost/DIRECTORY/AID/news/this_is_article_title
ブラウザバーでは、ニュースを提供することもできます。そして、それは愚かなIDについて何の忙しさもありません。上記のコードにはバグがあるかもしれませんが、製品サーバーに配置しないでください。