2011-10-17 5 views
0

私はPHPと.htaccessの初心者です。ここに私のジレンマがあります...望ましくないリクエストを無効にするにはどうすればよいですか? (MySQL、.htaccess、PHP)

私は動的ページを構築し、htaccessを使ってURLを書き換えました。

州:example.com/massachusetts-colleges.html

市:example.com/massachusetts-colleges/boston-ma-colleges.html

ページ...例の3種類があります。

大学:example.com/massachusetts-colleges/boston-ma-colleges/harvard.html

問題は、ページが(おそらく古いリンク構造から)要求されているということであるような存在してはなりません:

example.com/boston-ma-colleges.html

状態のURLは、データベース(stateSlug =マサチューセッツ大学)に位置テーブルに記憶されています。都市のURLはデータベースのロケーションテーブルにも格納され、対応する州のスラッグもその都市に保存されます(citySlug = boston-ma-collegesおよびstateSlug = massachusetts-colleges)。カレッジは別のテーブルに保存されており、都市に対応するためにIDを使用します。

「その他」のURLにアクセスできないようにするには(テンプレートとデータは表示されません)、404ページを表示(またはホームページにリダイレクト)するために.htaccessを使用するにはどうすればよいですか?

これは私の.htaccessファイルが今のようになります。もう一度

RewriteEngine on 
RewriteRule ^([^/\.]+)\.html?$ php/statePage.php?stateSlug=$1 [L] 
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)\.html?$ php/cityPage.php?citySlug=$2&stateSlug=$1 [L] 
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)/([^/\.]+)\.html?$ php/collegePage.php?collegeSlug=$3&citySlug=$2&stateSlug=$1 [L] 

、私はhtaccessファイルとPHP言語にやや新しいです。私はこの問題について何か助けていただければ幸いです。

ありがとうございました!

RewriteRule ^(.*)$ - [F] 

リクエストあなたのイメージとCSSをいじり避けるために:すべてのコンテンツは、上記のいずれかのURLにマッチしている、あなたは、単に最後に別のルールを追加することによって、他のすべてへのアクセスを禁止することができますと仮定

答えて

0

は、以下のことを試してみてください、しかし、あなたの404ページでindex.phpを置き換える:

Order allow,deny 
Allow from all 
RewriteEngine On 

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$l [L] 

これは、例えばindex.phpまたはスクリプトファイルの選択、404ページに見つからなかったすべてのファイルとディレクトリの要求をリダイレクトする必要があります。ヘッダーを404応答コードに設定することを忘れないでください。

私は同様の問題を解決しようとしたとき、彼らのwikiページは非常に有用だったhttp://codeigniter.com/wiki/mod_rewrite/

でCodeIgniterのWikiページからこれを得ました。

1

、あなたが追加する必要があります

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif|js|css)$ [NC] 
RewriteRule ^(.*)$ - [F] 

をあなたがアクセス不能になされるべきであるディレクトリを持っている場合は、のみ、以下でそれらに.htaccessファイルを置く:

Order deny,allow 
deny from all 
+0

私はちょうどあなたが私に言ったことを追加しようとし、それは表示されるはずのページに "禁じられた"を引き起こしました... – NotJay

0

/allow/..のすべてのパブリックファイルを、/allow/..ディレクトリにないすべての要求に対して404と表示してください。最後に、/allow/..から実ディレクトリにファイルを書き換えます。

これはすばらしい回避方法です。:) deny allをすべてのディレクトリで使用するよりも優れています。

+0

ありがとう...私はhtaccessでなかった何かを考え出した...私はページコードを使ってdbのスラッグをチェックし、ヘッダーがない場合はヘッダーを404に変更しました。 – NotJay

関連する問題