通常、ページはタイトルではなくIDで識別します。クライアントは常に、、、、、などの奇妙な文字をページタイトルに追加しよう"
とし/
ます'
。&
これらの文字はリンクを壊す可能性があります。
http://example.com/page/1234/the+official+ "i'm + hungry" / "i'm + thirsty" + page
この書き換えルールは、ページのIDを収集してから、2番目の変数として他のものを追加する必要があります。
RewriteRule ^page/([0-9]+)/(.*)$ /page.php?id=$1&p=$2 [L]
これを行うと、タイトルは純粋に表面的なものになり、予期しない動作を防ぐために、より厳密なフィルターを追加できます(たとえば、ユーザーが名前の付いたページを作成した場合、Webページのコンテンツに影響を与えることなくURLにthe official "i'm hungry"/"i'm thirsty" page
変換できます。the-official-i-m-hungry-i-m-thirsy-page
たとえば、これらのリンクは両方とも同じ場所に移動します。
http://stackoverflow.com/questions/12864634/htaccess-and-double-quotations-in-url
http://stackoverflow.com/questions/12864634/gibberishgibberishgibberish
ユーザーを正しいタイトルのページに強制的に移動させたい場合は、更新page.php
してURLからIDを取得し、ユーザーを適切で見た目に適切なURLにリダイレクトできます。例えば:
<?php
function ConvertTitle($title)
{
// Replace all non-alphanumeric characters with a dash (-)
return preg_replace($title, '%[^A-z0-9]+%', '-');
}
$id = $_GET['id'];
$title = getArticleTitleById($id);
// If the title isn't correct
if(ConvertTitle($title) != ConvertTitle($_GET['p'])
{
// Send the user to the correct Cosmetic URL, StackOverflow does something like this
$url = '/page/'.$id.'/'. ConvertTitle($title);
header("location: $url");
}
// load the page as normal
?>
ただし、名前ではなくページのIDでコンテンツを読み込む限り、URLが正しくなくても正しく機能するはずです。