1

このhtaccessファイルをいくつかの書き換えルールで実行しましたが、問題は、サーバー上の個々の.phpファイルにアクセスできるだけでなく、domain.com / admin/change_profile.phpなどのセクションに直接アクセスできることです。

これは正常ですか?私はこれが起こるはずがないと思った。このhtaccessファイルを実行して、ルールが満たされた場合にのみそのフォルダーに移動するようにするにはどうすればよいですか?つまり、domain.com / admin/change_profile.phpまたはdomain.com/admin/などへの直接アクセスを禁止します。

RewriteEngine on
RewriteRule ^/?(us|uk|eu)/?$ test.php [NC,L] #Country
RewriteRule ^/?(us|uk|eu)/(profile)/([a-zA-z0-9]+)/?$ test.php [NC,L] #Country - Profile

ここ:

http://localhost/us -> Works
http://localhost/us/profile/companyname -> Works
http://localhost/admin -> Works too! But admin is not in the set of rules above. admin is a folder inside htdocs.

(us | uk | eu)ルールの一部ではないので、機能するべきではありませんでした。注:htdocs内にphpファイルが含まれるフォルダーです。これはどのように起こっているのか、そしてそれをどのように克服するのか。

4

1 に答える 1

0

これは正常ですか?私はこれが起こるはずがないと思った。

はい、これは正常です。これはWebサーバーが行うことです。URIと一致するルールは/admin/change_profile.phpないため、どのルールも適用されず、Webサーバーは本来の機能を実行します。つまり、要求されたリソースを提供します。何かにアクセスしたくない場合は、次のいずれかを実行できます。

  • ドキュメントルートからディレクトリを削除します(またはドキュメントルートからディレクトリを移動します)
  • これでアクセスしたくないディレクトリにhtaccessファイルを追加します。

    Order allow,deny
    Deny from all
    
  • ドキュメントルートのhtaccessファイルでアクセスしたくないディレクトリを書き換えるルールを追加します。

    RewriteRule ^/?admin test.php [NC,L]
    
  • すべてをtest.phpに完全にルーティングします。

    RewriteRule ^ test.php [L]
    
于 2012-09-04T04:43:27.317 に答える