0

404ヘッダーなしのApache phpサーバーでのリダイレクトでURIをキャプチャして保存する

私はニュースのウェブサイト/ブログを構築しています。URL を特定の方法でフォーマットしたい。次のように:

    http://example.com/news/1234/title_of_article/

すべての記事のディレクトリ構造を作成する手間と混乱は望んでいません。メインファイルにリダイレクトするように.htaccessファイルを設定しました

     ErrorDocument 404 /main_file.php

次に、私のメイン ファイルは $_SERVER[REQUEST_URI] を使用して、要求されたページを見つけ、そのページを作成します。

それはすべてうまくいきます。唯一の問題は、.htaccess リダイレクトが 404 ヘッダーをクライアントに送信することだと思います。メインファイルのフォローアップ 200 ヘッダーでこれに対抗しようとしましたが、うまくいかないと思います。W3C Validator は 404 静止を検出し、検索エンジンはページをインデックスしていないようです。 

ブラウザに 404 エラーを送信せずに URL の形式を維持するにはどうすればよいですか? 何十ものフォルダを作成せずに簡単な代替手段はありますか?

4

1 に答える 1

2

main_file.phpを使用する代わりに、単純な内部リダイレクトを使用して、存在しないファイルまたはフォルダーをリダイレクトすることができますErrorDocument

# if folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
# redirect anything to
RewriteRule ^(.*)$ main_file.php/$1 [L]

を使用して処理する$_SERVER['REQUEST_URI']か、さらにカスタマイズして、次のようなパラメーターとして処理することができます。

# if folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# if file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
# redirect anything to
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ main_file.php?category=$1&id=$2&title=$3 [L]

上記は内部的にリダイレクトされます:

http://example.com/news/1234/title_of_article/

に:

http://example.com/main_file.php?category=news&id=1234&title=title_of_article

ただし、ブラウザの URL はそのままです。

http://example.com/news/1234/title_of_article/
于 2013-08-26T01:43:03.763 に答える