Прямо сейчас у меня есть этот конфиг:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
Однако, если я зайду www.mysite.com/phpmyadmin
(заметьте отсутствие косой черты), он не найдет то, что я ищу 404. Я предполагаю, потому что я не включаю косую черту. Как я могу это исправить?
Ответы:
Это может быть в регулярном выражении, которое вы используете -
Выше будет соответствовать / phpmyadmin /, / phpmyadmin / что-нибудь / еще / здесь, но это не будет соответствовать / phpmyadmin, потому что регулярное выражение включает в себя завершающий слеш.
Вы, вероятно, хотите что-то вроде этого:
Знак вопроса является квантификатором регулярного выражения и должен указывать nginx, что он соответствует нулю или одному из предыдущих символов (косая черта).
источник
Лучшее решение:
Убедитесь, что у сервера есть права доступа в
/home/phpmyadmin
первую очередь.Объяснение разницы с принятым ответом:
Это все о регулярных выражениях .
Прежде всего,
^
символ означает, что вы хотите соответствовать с начала строки, а не где-то посередине. Знак$
в конце означает совпадение с концом строки.В
(?:)
средства , не захватив группу - мы не хотим его в результатах съемки, но мы хотим простую группу несколько символов. Мы группируем это следующим образом, потому что мы хотим, чтобы/
символ был незначительной частью дочернего пути, а не существенной частью родительского пути.источник
Почему бы тебе просто не использовать
?
источник
alias
директиве?/phpmyadminblahblahblahblah
или любой другой комбинацииЯ знаю, что это старый вопрос, но для всех, кто попадает сюда через Google, я решил его следующим образом (вариант @ kbec, который был довольно хорошим):
Это захватит любой вариант
/foo
и перенаправит его/bar
на другой URL (включая параметры). Я показываю это сproxy_pass
директивой, но она также будет работатьalias
./foo
->/bar
/foo/
->/bar/
/foo/sub
->/bar/sub
/foo/sub1/sub2/?param=value
->/bar/sub1/sub2/?param=value
Это работает, потому
$1
что опционально будет захватывать подресурсы плюс начальный слеш, поэтому не будет захватывать подобные вещи/fooextra/
. Он также будет правильно перенаправлять текущий или отсутствующий завершающий слеш.источник
Это перенаправление будет переписывать только URL с косой чертой и без нее. Все, что придет после косой черты, не будет перезаписано.
domain.com/location => перенаправлен на domain.com/new/location
domain.com/location => перенаправлен на domain.com/new/location
domain.com/location/other => не перенаправлен
источник
Вы пытались использовать
try_files
директиву?источник
Я сделал это так
источник
Почему бы не написать две переписки просто:
источник