0

最初に、私はmod_rewrite - ミスタイプされた 'pretty' url をリダイレクトする方法を見ましたが、OP はミスタイプされた URL を正しい URL にリダイレクトすることを望んでいます。

簡単な質問です。私が持っているいくつかの mod re_write コードを改善するための解決策を探しています。

現在、誰かが私のサイトの製品ページ、つまり「/products/[category]/[product-name]」である URL を入力した場合、.htaccess ファイルには次のコードが含まれます。

RewriteRule ^products\/([^/]+)\/([^/]+)$        ?page=product&product=$2 [L]

これは意図したとおりに機能しますが、誰かが [product-name] のみを誤って入力した場合でも、URL 内のその product-name を変数として使用してテンプレート ページが読み込まれ、404 エラーは発生しません。

次のようにすべてのエラーページを処理します。

#ErrorDocument 404          /index.php?page=error404

誰かが以前の書き換えルールを適用する方法に光を当ててくれることを願っています。つまり、存在しないページ、つまり、ケトルと呼ばれる製品があり、誰かが URL の最後にケトルを入力した場合、テンプレート ページをロードするのではなく 404 になります。 GET変数としてケトルを使用します。

前もって感謝します。

4

2 に答える 2

2

index.phpスクリプトが「ページ」および「製品」パラメーターを処理していると仮定しています。「製品」パラメーターが実際に有効な製品名を指しているかどうかを知るのは、それだけです。そうでない場合は、ヘッダー関数を使用して 404 を生成し、の内容を表示する必要がありpage=error404ます。

htaccess ファイルと mod_rewrite は、ページ名が正しいかタイプミスかを認識しません。ルックアップを行うスクリプトのみが認識します。

于 2013-04-05T17:49:15.260 に答える
1

次の形式を例として、PHP スクリプトを動的ページの<head>要素に書き込むこともできます。

$con = mysqli_connect("$hostname", "$username", "$password", "$database");

if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
}

$result = mysqli_query($con, "SELECT content FROM pages WHERE id = $value LIMIT 1");

if (0 = mysqli_fetch_array($result)) {
    echo '<meta http-equiv="location" content="URL=http://www.yourdomain.com/index.php?page=error404">';
}

注: 上記のコードが正しいかどうか、再確認してください。これは単なる例であり、構文が十分にレビューされておらず、SQL クエリの$resultの行をカウントするためにmysqli_fetch_array()が使用されているかどうかです。

于 2013-04-05T19:20:36.170 に答える