Posted by hitomi_o_o on June 24, 2013 at 12:14am
こんにちは、毎度お世話になっております。
表題の件についての質問です。
例えば、http://hogehoge.com/user
といったログインページにだけ、アクセス制限をかけたいと思っています。
条件としては、
●特定のホストやIPの人だけがログインページにアクセスできるようにする。
●その他の人は、トップページに転送される。
userモジュールのフォルダに.htaccessを置いてやってみているのですが、うまくいきません。
モジュールや記述などで良い方法が有りましたら、ご教授お願い致します。
※もし場違いな質問であれば、申し訳ありません。
Comments
Drupalはインストールディレクトリの"index.ph
Drupalはインストールディレクトリの"index.php" に全てのアクセスを一旦集めてから、
それぞれのURLへタスクを割り振ります。
モジュールフォルダへはブラウザから直接アクセスすることはないですので、
.htaccessへ何か書きたい場合は、インストールディレクトリ直下の.htaccessに追記します。
アップデート時には上書きされないように.htaccessファイルをバックアップしてからされると良いと思います。
また、環境などが許せばApacheのバーチャルホストの設定に書いておけばアップデートの際に気にせずに作業ができます。
qchan様
ありがとうございます。
>.htaccessへ何か書きたい場合は、インストールディレクトリ直下の.htaccessに追記します。
なるほど、直下にある.htaccessに追記してしまっていいんですね。
使用するのは、RewriteRuleとか RewriteCondでしょうか…
この辺の知識はかなり不足しているので、調べつつやってみます。
ありがとうございます。
今.htaccessのの中に、以下のように追記してみています。
500エラーが出て動かないので、調べて進めてみます。
#REMOTE_ADDRに書かれたIPなら、/userへRedirect
RewriteCond %{REMOTE_ADDR} ^(000.000.00.000$)
RewriteRule ^/user/$ /user/$
#REMOTE_ADDRに書かれたIPでない場合、userから/index.phpへRedirect
RewriteCoud {[REMOTE_ADDR} !^(000.000.00.000$)
RewriteRule ^/user/$ index.php$
途中経過です。
調べつつ直してみていますが、うまくいきません。
一度、ページが表示されたものの、どこのページにも遷移できないという状況に。
その後、戻して直してみましたが、500Errorになってしまいます。
おかしい点が多々あるかと思いますが、何かアドバイスを頂ければと思います。
.htaccess内
# 書き換えのベースパス
RewriteBase http://hogehoge.com/user
# 条件
# REMOTE_ADDRのアドレス以外の場合、/userへのアクセスがあったらトップに戻す。
RewriteCond %{REMOTE_ADDR} !111.222.333.444\
RewriteRule ^/user$ [R=301,L] RewriteRule ^.* - [F]
※RewriteRuleが今アクセス禁止になっていますが、トップページ転送に直したいと思っています。
.htaccessにはすでにRewriteRuleが書かれ
.htaccessにはすでにRewriteRuleが書かれていますから、追記する場所がおかしいと
上手く動きません。
Drupal7を前提に書きますが、
99行目あたり、
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
の2行の前に
RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444RewriteRule (^user$|^user/(.*)$) / [R=302,L]
と書き入れると
"REMOTE_ADDRのアドレス以外の場合、/userへのアクセスがあったらトップに戻す。"
が実現出来るはずです。
正規表現とmod_rewriteのオプションなどはここで解説するのは難しいですね。
Drupalとは独立したWeb制作一般の話ですので、日本語情報も多いですから、
Apacheのmod_rewrite の設定の書き方は別途検索などして調べてみてください。
カスタムモジュールで
久しぶりに時間が取れたので投稿させて頂きます。^^
カスタムモジュールにフックを記述する方法なら、こんな感じでどうでしょう?
メニュールーターの設定を変更します。
<?php
/**
* Implementation of hook_menu_alter()
*/
function custom_menu_alter(&$items) {
// '/user' のパスの処理を行うコールバック関数を変更する
$items['user']['page callback'] = 'custom_user_page';
$items['user']['file'] = 'custom.module';
$items['user']['file path'] = drupal_get_path('module', 'custom');
}
/**
* メニューコールバック
*/
function custom_user_page() {
// 特定の IPアドレスからのアクセスはトップページにリダイレクト
if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1'))) {
drupal_goto();
}
// そうでなければ通常のユーザーページを表示する
module_load_include('inc', 'user', 'user.pages');
return user_page();
}
?>
ちなみにトップページにリダイレクトしないで良ければ、hook_menu_alter() で
$items['user']['access callback']を変更することも出来ます。その場合は単に Access denied となります。
Drupal カスタマイズTips 更新中...
CMS自由自在!
http://customfield.jp/