Защита определенной страницы WordPress с помощью .htaccess - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть конкретная страница в моей установке WordPress (это настоящая страница в WordPress, только с красивыми URL-адресами), и я хочу защитить ее паролем с помощью предоставленного мне файла .htaccess.

Например,, страница http://www.myawesomewebsite.com/members.Я хочу, чтобы только некоторые пользователи имели к нему доступ, а их имя пользователя и пароль хранятся в файле .htpasswd.

Файл .htaccess, отправленный мне клиентом,

AuthUserFile /put the path to the password file here
AuthGroupFile /dev/null
AuthName RESTRICTED
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

Мне нужноиспользуйте эти параметры для защиты этой страницы WordPress.Я схожу с ума, и мои поиски ведут в никуда.Есть догадки?

Ответы [ 3 ]

1 голос
/ 25 июня 2012

Мне удалось это сделать:

  1. Создание структуры каталогов в файловой системе, защищенной .htaccess.
  2. Добавление настраиваемого поля на любую страницу, которую яхотите защитить, указывает, какой каталог используется для его защиты.
  3. Изменение шаблона page.php для ограничения доступа к странице в зависимости от того, имеет ли пользователь доступ к каталогу, указанному в настраиваемом поле.

Конкретные шаги следующие:

  1. Создание каталога "groups" внутри каталога wp-content.
  2. Создание wp-content / groups/index.php со следующим содержимым:

    <?php
    require( dirname(__FILE__) . '/../../wp-load.php' );
    class CASGroupAuth {
        static function authenticate(){
            $groups = @$_SESSION['cas-groups'];
            if ( !$groups ) $groups = array();
            $groupdir = basename(dirname($_SERVER['PHP_SELF']));
            $groups[$groupdir] = true;
            $_SESSION['cas-groups'] = $groups;
            if (!@$_GET['redirect_to'] ){
                die("You didn't provide a redirect");
            }
            header('Location: '.$_GET['redirect_to']);
            exit;
        }
    }
    CASGroupAuth::authenticate();
    
  3. Создать подкаталог «mygroup» внутри каталога «groups».
  4. Создать символическую ссылку на группы/index.php в каталоге mygroups.Т.е.

    $ cd mygroup
    $ ln -s ../index.php index.php
    
  5. Добавьте файл .htaccess в каталог groups / mygroup с соответствующими ограничениями доступа.В моем случае я использовал модуль Apache CAS, поэтому мой файл .htaccess выглядел следующим образом:

    AuthType CAS
    require sfu-user shannah !my-maillist
    
  6. Измените шаблон page.php в моей теме (т.е. внутри wp-content/ themes / mytheme /) должно быть:

    <?php if (have_posts()) : the_post(); 
    $group = get_post_meta(get_the_ID(), 'cas-group', true);
    if ( trim($group) ){
        $group = trim($group);
        $existingGroups = @$_SESSION['cas-groups'];
        if ( !$existingGroups or !@$existingGroups[$group] ){
            nocache_headers();
            header('HTTP1.1 302 Moved Temporarily');
            header('Location: ' . get_settings('siteurl') . '/wp-content/groups/'.basename($group).'/index.php?redirect_to='.urlencode($_SERVER['REQUEST_URI']));
            header('Status: 302 Moved Temporarily');
            exit;
        }
    }
    
    ?>
    <?php get_header(); ?>
    
        <div id="content" class="narrowcolumn">
    
    
            <div id="PageTitle"><!-- TemplateBeginEditable name="PageTitle" --><?php the_title();  ?><!-- TemplateEndEditable --></div>
            <div class="post" id="post-<?php the_ID(); ?>">
                <div class="entry">
                    <?php the_content('<p class="serif">Read the rest of this page &raquo;</p>'); ?>
    
    
    
                </div>
            </div>
    
        <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
        </div>
    
    
    <?php get_footer(); ?>
    <?php endif; ?>
    

Важной частью этого является раздел вверху, поскольку код проверяет настраиваемое поле cas-groups и перенаправляетпользователь, должен быть запущен перед отправкой любого вывода в браузер.Чтобы сделать это, я изменил расположение инструкции if (has_posts ()), чтобы обернуть всю страницу, а не только содержимое, как в шаблоне по умолчанию.

На этом этапе, если вы добавитенастраиваемое поле для любой страницы сайта WordPress с именем «cas-group» и значением «mygroup», тогда доступ к этой странице будет надлежащим образом ограничен для пользователей, которые имеют доступ к вашему каталогу groups / mygroup на основании правил в нем.htaccess файл.

Если вы хотите иметь разные группы, вы можете просто сделать копию каталога mygroup и изменить ограничения файла .htaccess внутри него.

0 голосов
/ 12 апреля 2011

Wordpress позволяет вам защищать страницы / сообщения с помощью пароля (и этот путь гораздо проще, чем с htaccess): зайдите в wp-admin, отредактируйте страницу / сообщение, которое вам нравится, чтобы сохранить конфиденциальность, но разрешите доступ для некоторых пользователей. тоже, и прямо под кнопкой «Предварительный просмотр изменений» вы увидите «Статус: опубликованное редактирование» и увидите его «Видимость: публичное редактирование», нажмите на редактирование видимости, выберите радиобокс защищенный паролем (или частный в этом отношении) введите пароль и нажмите ОК. Вам должно быть хорошо идти.

0 голосов
/ 12 апреля 2011

Все, что вам нужно сделать, это поместить файл .htaccess в каталог "members", а затем указать в первой строке файл пароля. Чтобы создать файл пароля, просто выполните:

htpasswd -c MyPasswordFile username
htpasswd MyPasswordFile anotherusername

Вот хорошая ссылка:

http://httpd.apache.org/docs/current/howto/htaccess.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...