2016-04-27 10 views
0

私はメニューを持っているindex.phpページを持っています。このメニューは、ログに記録されているかどうかによって異なります。 これまでに、私は2つのファイルhtmlを作成しました: "logged-menu-html"と "not-logged-menu.html"、次にindex.phpに私はPHPのようなものを書きます:
"if(logged)include (ログされたmenu.html)、そうでなければ(ログされていないmenu.html) ".phpと.htmlは "server"でのみ開くことができます

最初の質問(私はちょうどいいです)..この方法は適切なメニューをロードするために正しいですか?それとも避けなければならないのでしょうか?

今、本当に質問してください。私はこれらの2つのファイル.htmlを "プライベート"にしておきたいと思います。これは、トラフのindex.phpでないとロードできないことを意味します! これまでのところ私はただ1つの解決策しか持っていません。私のサーバー(私の大学のものです)とFileZillaを使って接続すると、私はファイルを公開したい場所にpublic_htmlというフォルダを持っています。
私が見つけた解決策は、public_htmlに兄弟フォルダを作成することです:この方法では、 "../privatefile/*.html"という表記を使用できません(index.phpがpublic_htmlの場合)。そのフォルダには到達しません。 このソリューションは問題ありませんか?それとも避けなければならないのでしょうか? :)

ありがとう!

+0

サーバーで使用でき、HTTPパスワードで保護されていないファイルは、常に公開されています。ただし、 '.htaccess'ファイルを編集して、特定のファイルやパスへのアクセスをブロックまたはリダイレクトすることができます。 – klaar

+2

Webサーバーからファイルを入手できないようにしたい場合、あなたがやっているようにWebルートの外に置くことは、完璧なソリューションIMOです。ちなみに、現在のセッション(ログイン/ログインしていない/ユーザーレベルなど)に基づいてオプションでメニューオプションを構築するmenu.phpファイルもあります。 – jeroen

答えて

1

あなたは、Apache使用している場合 - バージョン2.4(それは私が現在使用しているものだ原因)

認証

誰もがあなたのページへのアクセスを得る前に、あなたはログインを設定することができます。 Apacheのフォルダ>ビン> htpasswdのに

ゴー - ターミナル

から開くhtpasswdは、これはあなたがパスワードファイルが作成されます初めての場合:次に、ユーザーのパスワードを入力します

htpasswd -c /dir username 

を。

これまでにパスワードファイルを作成していた場合は、-cフラグを削除するだけです。

次に、あなたの.htaccessファイルには、次のように入力します。

AuthType BasiC#Type of authentication used 
AuthName "This is a private area, please Log In!" #Your Login Text 

AuthUserFile "C:\Apache24\Password.txt" #In which your password file is stored. 
AuthGroupFile /dev/null 

require valid-user 

それとも、あなたはhttpd.confにそれをしたい場合:

<Location "/protected-area"> 
AuthUserFile "C:\Apache24\Password.txt" 
AuthName "This is a private area, please Log In!" 
AuthGroupFile /dev/null 
AuthType Basic 
Require valid-user 
</Location> 

を、誰もが自分のページに行けば、彼らはログインするように求められます。

ログイン

有効なユーザーにアクセスできるようにログインページを設定できます。

これはあなたのDirectoryIndexLogin.phpに設定された「Login.php」

まず、のようなファイルを作成します。この場合のように、「認証」とは異なり、または任意のファイル名に設定しますログインページ。

次に、ログインページを作成します。welcome.php

<?php 
$err = ''; 

if (isset($_POST['login']) && !empty($_POST['username']) && !empty($_POST['password'])) { 

    if ($_POST['username'] == 'user' && $_POST['password'] == '123456') { 
    $_SESSION['valid'] = true; 
    $_SESSION['timeout'] = time(); 
    $_SESSION['username'] = 'user'; 

    header('Location: Welcome.php'); 
    } else { 
    $err = 'Wrong username or password'; 
    } 
} 
?> 

<?php echo htmlspecialchars($_SERVER[PHP_SELF]); ?> 

<head>一部でPHP:

がアクセスからユーザーを防ぐために、あなたの<form>

は、action属性に設定しましたログインしていない "Welcome.php":

<?php 
if(isset($_SESSION['valid']) && $_SESSION['valid'] == true) { 
    echo "You are logged in!"; 
} else { 
    header("Location: Login.php"); 
} 
?> 

...私はこのことについてはよく分からない

<Directory ~ "\.private"> 
Order allow,deny 
Deny from all 
</Directory> 

をアクセス

を拒否書き換えルール

RewriteRule ^(.*/)?\\.private/ - [F,L] 

リダイレクト

RedirectMatch 404 /\\.private(/|$) 
関連する問題