.htaccess を使用して 6 桁の数字の URL をスクリプトに送信し、その他の無効な URL をすべて 404 として処理することは可能ですか?

StackOverflow https://stackoverflow.com/questions/73123

  •  09-06-2019
  •  | 
  •  

質問

.htaccess を使用して 6 桁の URL をすべてスクリプトに送信して処理し、その他の無効な URL をすべてエラー 404 として処理することは可能ですか?

例えば:

http://mywebsite.com/132483

に送信されます:

http://mywebsite.com/scriptname.php?no=132483

しかし

http://mywebsite.com/132483a or
http://mywebsite.com/asdf

404 エラーとして処理されます。

現在、カスタム PHP 404 スクリプトを使用してこれを動作させていますが、ちょっとぎこちないです。.htaccess の方がより洗練されたソリューションであるように私には思えますが、それが可能かどうかはまだわかりません。

役に立ちましたか?

解決

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^([0-9]{6})$ scriptname.php?no=$1 [L]
</IfModule>

クリーンな URL を保存するには

http://mywebsite.com/132483

scriptname.php を提供するときは [L] のみを使用します。[R=301] を使用すると、scriptname.php?no=xxx にリダイレクトされます。

これは役に立つかもしれません http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/

他のヒント

htaccess ファイルに次の内容を記述します。

RewriteEngine On
RewriteRule ^([0-9]{6})$ /scriptname.php?no=$1 [L]

最初の行は mod_rewrite エンジンをオンにします。() 括弧は内容を $1 に入れます。連続する () には $2、$3... が入ります。等々。[0-9]{6} は、0 ~ 9 の文字のみを含む正確に 6 文字の長さの文字列を検索することを示します。

末尾の [L] により、これが最後のルールになります。適用される場合、ルールの処理は停止します。

^ と $ は、受信 URI の開始と終了をマークします。

お役に立てば幸いです!

はい、mod_rewrite を使用すると可能です。オンラインには優れた mod_rewrite チュートリアルがたくさんあります。Google で検索するとすぐに答えが見つかるはずです。

基本的に、使用する正規表現が数字のみを検索し、他の文字を検索しないこと、および長さが 6 であることを確認する必要があります。次に、取得した番号を使用して scriptname.?no= にリダイレクトします。

お役に立てれば!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top