2016-12-20 25 views
0

私は、.htaccessでURLを書き換えるシステムを実現しようとしています。.htaccess PHPの書き換えURL

RewriteRule^([a-zA-Z0-9] +) $ view.php? Id = $ 1:私はhtaccessファイルで、このルールを使用http://localhost/456

http://localhost/view.php?Id=456

は、その後、私はそれを変換したい:私はこのフォームのURLを持っている場合は :

は次にここに私の目標です

これは非常にうまくいきます。

しかし、私はつまり、代わりに私が置くことができる456のIDにポイントを追加したい私の問題は:http://localhost/my.book

+0

期間を許可するためにreg-xパターンを変更するだけでよいでしょう。たぶんすべてが有効です。 –

答えて

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?id=$1 [QSA,L] 

あなたはRewriteRuleは、URLで渡された入力は、実際のファイルでない場合に実行されるように、以下の記述されたサーバーに伝えるためにRewriteRule行の前にRewriteCond %{REQUEST_FILENAME} !-fを必要としています。サーバーは入力に一致するファイルを検索するため、URLにはmy.bookを渡します.Webサーバーは.php.htmlのように拡張子の接頭辞として.を認識します。 Not Foundmy.bookというファイルが存在しない場合はエラーとなります。したがって、あなたはまた、URLに.をエスケープする必要があります。

が入力中 .年代を許可するには、 ^([a-zA-Z0-9\.]+)$のような文字クラスグループ内のエスケープシーケンス \.を追加する必要があります。これを許可すると、URLに拡張子をエスケープすることができます。つまり、URLに view.phpを渡しても、実際のファイルには移動しません。むしろ、それはクエリ文字列の値と見なされます。

+0

ご協力いただきありがとうございます 非常にうまく機能しました! –

+0

あなたは大歓迎です!私の答えがあなたのために働いたならば、答えを受け入れることを自由にしてください。 :) – Perumal

0

はこれを試してみてください:基本的には

RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?Id=$1 

言うことです

をmy.book私はあなたのパターンに\.を追加しました。これにより、正規表現が小文字、小文字、小数点、ピリオド(.)に一致するかどうかが確認されます。この情報がお役に立てば幸い:)

+0

これは動作しません。また何が起こっているのか説明していないので、役に立たない。代わりに、10秒後に "理由"(正規表現を説明する)と正しい解決策(ヒント:スペースを削除)を投稿することができます。その後、OPは再びここに投稿する必要はなく、回答を探している他の人々が学ぶことができます。 – Robbie

+0

@Robbie updtaed –

+0

ありがとうございました。もっと役立つ! – Robbie