-1

ハイパーリンクをクリックすると、引用符が原因で 404 エラーが発生します。MySQL 列titleにはこの値がありますthe official "i'm hungry" page

$title = str_replace(' ','-',$row['title']);
<a href='/page/$id/$title'>click me</a>

ここにmodrewriteのないURLがありますhttp://localhost/page.php&id=7&p=the-official-"i'm-hungry"-page

modrewrite は URL を に変更しますhttp://localhost/page/7/the-official-"i'm-hungry"-pageが、リンクが機能していません。

書き直しのルールはこちらRewriteRule ^page/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?/?$ /page.php?id=$1&p=$2 [L]

404 エラーが発生しないようにするにはどうすればよいですか?

4

2 に答える 2

1

通常、ページはタイトルではなく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が正しくなくても正しく機能するはずです。

于 2012-10-12T19:03:31.833 に答える
0

使用したのではなく、str_replaceを使用して、preg_replaceから文字と数字以外のものを取り除き、$titleそれを-

于 2012-10-12T18:09:36.210 に答える