Исключая каталог от корня .htaccess переписывают правило позволить этому быть защищенным паролем?

Корректное использование из командной строки для того, чтобы закрыть Mac OS после 60 минут:

sudo shutdown -h +60

Это не метод, который Apple рекомендует использовать, хотя это - вероятно, лучший способ на бездисплейном сервере. (Обновление: См. комментарий и ссылку от @radius - использование завершения работы рекомендуется сервером Apple администраторское руководство CLI). От Руководства Наркоманов Командной строки по Mac OS X (сайт устарел, но ссылка на использование osascript является текущей):

Перезагрузка и закрытие

Хотя можно перезагрузить или закрыть системы Mac OS X через традиционный останов, перезагрузку и завершить работу команд, рекомендуемый Apple способ выключить компьютер удаленно состоит в том, чтобы отправить Средству поиска Событие Apple. Это может быть выполнено с помощью команды osascript для выполнения AppleScript:

osascript -e 'tell application "Finder" to shut down'

или

osascript -e 'tell application "Finder" to restart'

Конечно, это будет только работать, если будет зарегистрированный пользователь, который не будет обычно иметь место с, скажем, бездисплейными серверами, в этом случае необходимо смочь использовать традиционные команды UNIX без негативных последствий.

2
задан 16 July 2012 в 01:14
8 ответов

Похоже, вы уже пробовали это, это наиболее очевидный ответ (как указал Понча), и он, вероятно, наиболее вероятно появится в руководстве / руководстве по mod_rewrite. Исключив каталог с помощью RewriteCond , отметив, что условие соответствует % {REQUEST_URI} , которое начинается с / ":

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/sub_dir
RewriteCond %{REQUEST_FILENAME} .*\.(jpeg|jpg|gif|png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /public/404.php [L]

RewriteCond %{REQUEST_URI} !^/sub_dir
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

РЕДАКТИРОВАТЬ:

Глядя на то, что вы пробовали, это тоже неправильно. Вам не нужна ведущая косая черта в совпадении с RewriteRule , когда оно находится в файле htaccess:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteRule ^sub_dir  - [L]


RewriteBase /
RewriteCond %{REQUEST_FILENAME} .*\.(jpeg|jpg|gif|png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /public/404.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
2
ответ дан 3 December 2019 в 09:20

Это правило перенаправляет на домашнюю страницу, если запрошенный путь не является существующим файлом и не существующим каталогом.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Очевидно, поскольку вас перенаправляют на домашнюю страницу,

1
ответ дан 3 December 2019 в 09:20

Как насчет того, чтобы вы попробовали просто сделать это в своем sub_dir .htaccess, чтобы запретить распространение modrewrite в ваш sub_dir :

    ## turn off rewrite engine
    RewriteEngine Off
    ## now do your auth stuff
    AuthUserFile "/home/[user]/public_html/.htpasswd"
    AuthType Basic
    AuthName "subdir"
    require valid-user

и если вы действительно нужны правила перезаписи для работы внутри sub_dir, а затем выполняйте их специально в этом файле .htaccess, чтобы не возникало путаницы. Как только вы запускаете RewriteEngine On / Off, правила из родительской папки не применяются напрямую. Сначала они считываются из этой папки, а затем из корня.

1
ответ дан 3 December 2019 в 09:20

Первое замечание:

AuthUserFile "/home/[user]/public_html/.htpasswd"

Похоже, ваш файл .htpasswd находится в общедоступном месте (public_html). Это проблема безопасности, вы должны поместить этот файл туда, где пользователь apache может его прочитать (проверьте права на каталог и файлы), но, конечно, не в место под DocumentRoot. Никто не может напрямую запрашивать файл .htpasswd, это файл только на стороне сервера. Но это не связано с вашей проблемой .

Ваша основная проблема в том, что вы не ответили на вопросы @Jon Lin и @mootinator. Какие файлы вы пытаетесь запросить в sub_dir, есть ли там какие-то файлы html, другой файл index.php? Следует ли разрешить список каталогов в этом каталоге? Как вы проводите тесты.

Когда запрос к sub_dir делается родительским. htaccess применяется по умолчанию (пытается перенаправить каждый запрос, который вы можете себе представить, на boostrapper index.php, за исключением отсутствующих файлов изображений и за исключением существующих каталогов или файлов). Таким образом, запрашивая реальный файл в sub_dir, у вас не должно возникнуть проблем с этими правилами . Хороший способ проверить это - прокомментировать Rules в корневом файле .htaccess.

Вы сказали, что сделали несколько тестов без корневого файла .htaccess, и это сработало. Так что, возможно, удаление Options -MultiViews сделало ваши тесты нормальными. MultiViews является частью переговоров по содержанию и представляет собой очень волшебное слово с очень странным поведением, поэтому допустим, например, вы запрашиваете subd_dir / foo в ваших тестах, MultiViews может найти файл sub_dir / FoO.html и обслужить его. Удалите MultiViews, и ваши тесты больше не будут работать (возможно). Предложения @Mootinator по проблемам с символическими ссылками также могут быть действительными, и у вас также может быть что-то в протестированных файлах, перенаправляющее на URL-адрес, пойманный первым правилом, странным вещам нет конца. Но наверняка «не работает» недостаточно, что «это»?

Как я уже сказал, вам необходимо предоставить нам больше информации. И дайте всем остальным читателям (даже в будущем) достаточно элементов, чтобы увидеть, может ли ваша проблема быть связана с их проблемами. Цель состоит не в том, чтобы нанять некоторых экспертов для работы непосредственно на вашем сервере, а в том, чтобы получить достоверные ответы на достоверные и подробные проблемы.

и у вас также может быть что-то в протестированных файлах, перенаправляющее на URL-адрес, захваченный первым правилом, странным вещам нет конца. Но наверняка «не работает» недостаточно, что «это»?

Как я уже сказал, вам необходимо предоставить нам больше информации. И дайте всем остальным читателям (даже в будущем) достаточно элементов, чтобы увидеть, может ли ваша проблема быть связана с их проблемами. Цель состоит не в том, чтобы нанять некоторых экспертов для работы непосредственно над вашим сервером, а в том, чтобы получить достоверные ответы на действительные и подробные проблемы.

и у вас также может быть что-то в протестированных файлах, перенаправляющее на URL-адрес, захваченный первым правилом, странным вещам нет конца. Но наверняка «не работает» недостаточно, что «это»?

Как я уже сказал, вам нужно предоставить нам больше информации. И дайте всем остальным читателям (даже в будущем) достаточно элементов, чтобы увидеть, может ли ваша проблема быть связана с их проблемами. Цель состоит не в том, чтобы нанять некоторых экспертов для работы непосредственно над вашим сервером, а в том, чтобы получить достоверные ответы на действительные и подробные проблемы.

1
ответ дан 3 December 2019 в 09:20

Добавьте еще один RewriteCond , чтобы исключить желаемый sub_dir (в оба правила):

RewriteCond %{REQUEST_URI} !^sub_dir
0
ответ дан 3 December 2019 в 09:20

Это довольно просто. Соберите все идентификаторы процессов и потоков, затем вызовите программу набор задач . Например,

taskset -cp 2
taskset -cp 4
…


напечатать все по имени процесса

набор задач имеет необязательный аргумент - all-tasks

taskset --all-tasks -p $(pgrep java)

Для некоторых процессов - all-tasks ] не печатает все дочерние процессы (в моем тестировании дочерние процессы для kthreadd не выводились, я не уверен, почему это так).

печатать все по процессам Сценарий помощника по имени

Вот короткий сценарий оболочки Linux для вывода сведений о сопоставлении ЦП для процесса по имени и всем его дочерним потокам.

#!/usr/bin/env bash

set -eu

pname=${1:-kthreadd}  # default to 'kthreadd'
for pid in $(pgrep "${pname}"); do
    echo "PID: ${pid} (${pname})"
    for tid in $(pgrep -P "${pid}" | tr '\n' ' '); do
        taskset -cp "${tid}"
    done
done

Выводы

PID: 2 (kthreadd)
pid 4's current affinity list: 0
pid 6's current affinity list: 0
pid 7's current affinity list: 0
pid 8's current affinity list: 0
…

Протестировано на Ubuntu 12, bash 4.

Чтобы решить эту проблему, нам нужно предоставить «фиктивный» файл, к которому клиент может быть направлен, если первоначальная попытка доступа не удалась.

ErrorDocument 401 /failed_auth.html
RewriteCond %{REQUEST_URI} ^/pwd-protected-sub-folder/(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/failed_auth.html$
RewriteRule ^.*$ - [L]
1
ответ дан 3 December 2019 в 09:20

Добавляем это в надежде, что это поможет кому-то другому. Я думаю, что @Mike L был на правильном пути. У меня была аналогичная ситуация (подкаталог htaccess, защищенный паролем с правилами перезаписи в корневом htaccess, который мне все еще нужен для основного сайта). В конце концов, решением для меня было просто добавить это в корневой файл .htaccess.

ErrorDocument 401 "Unauthorised"

Вам все равно нужно будет добавить соответствующие правила, чтобы разрешить доступ к подкаталогу, конечно, но запрос пароля не отображался. исправлено с использованием вышеуказанного. Надеюсь, это поможет!

0
ответ дан 3 December 2019 в 09:20

Для сайта, использующего обычный общий хостинг на основе cPanel (Apache 2.2), я решил, похоже, ту же проблему, добавив файл с именем «401.shtml» в корень документа ( public_html). Простое существование файла, даже без директивы ErrorDocument 401 в .htaccess, решило проблему.

0
ответ дан 3 December 2019 в 09:20

Теги

Похожие вопросы