2016-10-01 7 views
2

URLに基​​づいてユーザを誘導するPHPコードをいくつか作成しました。コードページにURLを与えるhtaccess用のコードがいくつか見つかりました。作業。しかし、それは技術的にファイル/フォルダとは何かを明らかにしています。.htaccessはパスがあってもすべてのURLを書き換えます。

私がwebsite.com/somethingrandom/somethingelseに行くと、私は404エラーを受け取りますが、website.com/cache/privateに行くと、禁止されていると言います。

images、css、jsファイルなどのいくつかの選択したファイルタイプを除いて、ファイルが存在しないように編集するにはどうすればよいですか?それが現在立っているとしてここで

はコードです:

RewriteBase/
RewriteEngine On 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-f 
# This rule converts your flat link to a query 
RewriteRule ^(.*)$ index.php?_page_location=$1 [L,NC,NE] 
+0

なぜあなたは、-dディレクトリの存在をチェックしていますか? – mario

+0

うーん、申し訳ありませんが、その半分の作品は、私はファイル上でそれをテストしたいと思います。 '-d'と' -f'ビットを削除しても、ファイルは禁止されていますが、 – Peter

+0

ありがとうございます、すでにそこにあるのですが、ここにファイルがあります(全部早くリンクしないのは残念です) - http://pastebin.com/drhSkL0Z – Peter

答えて

1

はこのようにあなたの規則があります。

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^index\.php$ - [L,NC] 

# add trailing slash to directories 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE] 

# If the request is not for known file types 
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|php|bmp|png|ico|tiff|css|js)$ [NC] 
# This rule converts your flat link to a query 
RewriteRule .* index.php?_page_location=$0 [L,QSA] 
+1

ありがとう、私は作業を終えたらチェックしなければならないでしょうが、それは私の後ろにあるかもしれないようです:) – Peter

+0

うーん、それはほとんどうまくいくが、フォルダリンクをたどるときに若干の問題がある修正可能です。これはどのファイルでも起こりませんが、 'website.com/folder1/folder2'に行くとURLは' website.com/folder1/folder2?_page_location = folder1/folder2'に変更されます。 – Peter

+0

また、これはあまり重要ではないので、わからない場合は心配しないでください。ただし、特定のファイルを許可/禁止する場合は、これらのファイルタイプをどのように上書きしますか? – Peter

1

あなたには、いくつかのファイルやディレクトリを非表示にする場合、すなわちexistantないとして、それを表示され、あなたがR|redirectフラグで

RewriteRule ^cache/private - [R=404,L] 
をリダイレクトする可能性があります

これはクライアントに、cache/private404)という名前のファイルがないことを示します。しかし、これはすべてクライアントのためであることに注意してください。 の接頭辞、またはIfなどの条件文で囲む必要があります。


すべてのファイルを非表示にする場合

は、あなたのウェブサイトのURLのすべてのために、「見つかりません」を返します

RewriteRule^- [R=404,L] 

このように、「広い」正規表現を使用します。あなたはまた、民間

  • キャッシュ以下のすべてを非表示になります。この

    RewriteRule ^(?:cache/private|secrets|database) - [R=404,L] 
    

    /でのように、URLのセットを与えることができます

  • 秘密
  • データベース

Apache - Regular Expressionsを参照してください独自のパターンをカスタマイズする方法の詳細についてはhttp://www.regular-expressions.info/をご覧ください。

+0

私は、何か他のものが必要な場合には知っておくと便利ですが、すべてのファイルに対して「ブランケット」として機能するものを好むでしょう:) – Peter

関連する問題