LINUX.ORG.RU

26
Всего сообщений: 777

Помогите с .htaccess для MVC

Пишу свой движок на паттерне MVC, возник затык, казалось бы, банальный, с .htaccess

Сейчас он у меня выглядит вот так:

AddDefaultCharset utf-8
RewriteEngine on 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ /index.php?controller=$1&method=$2 [L,QSA]

Не получается вот что:

1. Сделать, чтобы адреса вида /a/b/ так же обрабатывались, как и /a/b (сейчас только /a/b без завершающего слеша работают)

2. Нужно, чтобы остальные параметры, если таковые будут, передавались в массив, т.е. типа такого index.php?controller=$1&method=$2&params[]=$3&params[]=$4

Подскажите, пожалуйста, как сделать или в каком направлении копать, потому что гуголь что-то мне не то подсказывает, ну либо я туплю.

 , ,

FlyBird11 ()

Зачем разбивать конфиг на много файлов?

Я понимаю, когда конфигурация постоянно меняется, удобно добавлять-убирать симлинки в /etc/apache2/*-enabled/ Но когда конфигурация устоялась, и её надо копировать на другие системы, не удобнее ли всё собрать в один файл? (Вопрос про современную версию Апача — 2.4.)

В каких случаях имеет смысл сводить конфиг в один файл? И когда это противопоказано? Ссылки на документацию приветствуются. (Гугл ищет только ограничение доступа ко всем файлам кроме одного.)

Заранее спасибо.

 ,

olegd ()

Virualmin и перенаправление

Доброго времени суток! Столкнулся с проблемой: есть сайты A,B,C, соответственно они так и расположены в списке виртуальных хостов, проблема в том, что если идти по http на любой из доменов то я попадаю на первый сайт из списка, он же A, если по https протоколу, все хорошо. Изменение настройка сайта по умолчанию ничего не дает, кто то сталкивался с такой проблемой?

 , ,

himik220 ()

Помогите с fail2ban

Доброго времени суток. Пытаюсь настроить на сервере правило для: CentOS-6 + fail2ban 0.8.6 + apache2.

Постепенно стараюсь вникать в данный вопрос - так что ногами не пинайте уж больно.

LOG APACHE - регулярные попытки запроса GET and POST

190.15.213.104 - - [24/Sep/2018:13:26:54 +0300] «POST /log.php HTTP/1.1» 302 494 "-" «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)»

190.15.213.104 - - [24/Sep/2018:13:26:54 +0300] «POST /fack.php HTTP/1.1» 302 496 "-" «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)»

190.15.213.104 - - [24/Sep/2018:13:26:54 +0300] «POST /angge.php HTTP/1.1» 302 498 "-" «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)»

190.15.213.104 - - [24/Sep/2018:13:26:54 +0300] «GET /index.php HTTP/1.1» 302 498 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36»

190.15.213.104 - - [24/Sep/2018:13:26:55 +0300] «GET /phpmyadmin/index.php HTTP/1.1» 302 520 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36»

190.15.213.104 - - [24/Sep/2018:13:26:55 +0300] «GET /phpMyAdmin/index.php HTTP/1.1» 302 520 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36»

190.15.213.104 - - [24/Sep/2018:13:26:55 +0300] «GET /pmd/index.php HTTP/1.1» 302 506 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36»

190.15.213.104 - - [24/Sep/2018:13:26:55 +0300] «GET /pma/index.php HTTP/1.1» 302 506 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36»

190.15.213.104 - - [24/Sep/2018:13:26:55 +0300] «GET /PMA/index.php HTTP/1.1» 302 506 "-" «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)

Помогите по данному логу, написать правильное регулярное выражение.

Заранее благодарен.

 , ,

kiggo ()

Apache игнорирует virtualhosts

При этом я не могу понять почему, всё время так делал и работало, а сейчас не хочет.

/etc/httpd/conf.d/10-site2.example.lan.conf

Listen 80
<VirtualHost 10.12.22.44>
    DocumentRoot "/var/www/html/example2/"
    ServerName site2.example.lan
    ServerAlias site2
    AllowOverride All
</VirtualHost>

При этом он открывает дефолтную директорию /var/www/html/, абсолютно насерая на то, что ему было приказано. httpd -t -D DUMP_VHOSTS наглядно показывает эту ситуацию. Ось centos7, свежая и чистая, из установленного только php7 из remirepo.

Почему такое поведение?

 

Romashev ()

Неправильно работает Rewrite не видит тип файлов html

Помогите разобраться: В .htaccess не работает Redirect для файлов c расширением .html

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

в элементарной конструкции РАБОТАЕТ

Redirect 302 /page5 /page8

но если расширение файла .html не срабатывает Перенаправление

в конструкции с расширением .html не работает

Redirect 302 /page1.html /page2.html

за ранее всем спасибо.

АКТУАЛЬНО!!!

 , ,

shrmvl ()

Твердотельный накопитель для WEB-сервера и MySQL. Стоит ли?

Скажите, есть ли смысл поменять SATA на SSD на WEB-сервере?
Или может только для хранения баз MySQL?

 ,

Slon747 ()

Закрыть доступ к определенным dot-файлам на apache2/nginx

Добрый, коллеги!

Решили прикрыть определенные скрытые файлы разрабов которые могут, но не должны быть доступны извне. Но хочется закрыть доступ не ко всем .* файлам, а по определенному паттерну:

  • Блокировать все директории популярных SCM (.git/ .hg/ .svn/ .bzr/ .cvs/)
  • Блокировать файлы популярных SCM (.gitignore .hgignore, что-то еще?)
  • Блокировать ht-файлы (.htaccess .htpasswd)
  • Блокировать любые файлы с разрешениями *.sql и *.sql.* (например, file.sql.gz)

Сейчас использую такие правила:

Apache2:

# Deny access to SQL and SCM dot-files:
# .hgignore .gitignore .htaccess .htpasswd *.sql *.sql.*
<FilesMatch "\.(hgignore|gitignore|ht(access|passwd))\Z|.*\.sql\Z|.*\.sql\..+\Z">
  deny from all
</FilesMatch>

# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
<DirectoryMatch "\.(git|hg|svn|bzr|cvs)(/)?\Z">
  deny from all
</DirectoryMatch>

Nginx:

# Deny access to SQL and SCM dot-files:
# .gitignore .hgignore .htaccess .htpasswd *.sql *.sql.*
location ~* (\.(hgignore|gitignore|ht(access|passwd))$|(\.sql)$|(\.sql\..+)$)
{
  deny all;
}

# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
location ~* \.(git|hg|svn|bzr|cvs)[/]?.*$
{
  deny all;
}

Основной вопрос: Как правильно это сделать? Сейчас сталкиваюсь с тем что с разными CMS и настройками веб-срверов иногда по разному работают.

  • Какие директивы и в каком месте (начало или конец конфига) лучше использовать, и почему?
  • Что лучше использовать (и надо ли) для обозначения начала и конца URL-запроса? На разных конфигурациях ^, $ и \Z по разному себя вели.
  • Как правильнее указать опциональный слеш в конце имен директорий, и надо ли вообще его указывать - (/)? или [/]? ?

    Извиняюсь, ни в регулярках, ни в настройках apache\nginx экспертом не являюсь. Доки читал, но но хочу услышать мнение коллег. Спасибо!

 , , ,

skyman ()

HTTPS + APACHE 2.4 - NEED HELP :)

Добрый день! Извиняюсь, что не по теме Django, но точно знаю, что здесь сидит большое количество специалистов и мб кто то поможет советом. Необходимо заставить работать HTTPS на Apache в локальной сети (с самоподписным сертификатом).

Что сделано:

По статье с Хабра (https://habr.com/post/192446/) были созданы самоподписные сертификаты и ключи). На сервере подключен модуль mod_ssl.so, а так же выполнены настройки: SSLEngine On SSLCertificateFile «путь до/сертификата.crt» SSLCertificateKeyFile «путь до/ключа.key» SSLCACertificateFile «путь до/CA-сертификата.crt» (пробовал с этой опцией и без)

<Location /> SSLRequireSSL On SSLVerifyClient optional SSLVerifyDepth 1 (пробовал различные значения...) SSLOptions +StdEnvVars +StrictRequire </Location> Запускаю апач - все ок, ошибок нет. На клиенте импортирую сертификат CA (пробовал так же выписывать для юзеров отдельный сертификат по аналогии с сервером и импортировать его - не помогло) в доверенные корневые центры + перезагружаю браузер. Захожу на сайт - https работает, шифрование идет (проверял снифером), если сертификат удалить у пользователя - браузер сразу же начинает ругаться на то, что нет доверия к сертификату и пускает на страницу с перечеркнутым HTTPS (поидее так и должно быть). Тут я подумал, что было бы отлично, чтобы пользователи без сертификата вообще не могли использовать ресурс (либо через mod_rewrite в случае ошибок ssl редиректились куда-либо... пока надо реализовать хотябы недоступность ресурса, в случае когда у юзера нет сертификата), для этого надо применить директиву SSLVerifyClient require, поменял конфиг + перезапустил апач. На клиенте проверил, что сертификат есть в контейнере, захожу на сайт.... а он сразу выходит в ошибку ERR_SSL_PROTOCOL_ERROR.

Кусок лога ssl:

*[Wed Sep 12 16:12:11.074234 2018] [ssl:error] [pid 4508:tid 944] [client 10.32.140.66:49330] AH02261: Re-negotiation handshake failed [Wed Sep 12 16:12:11.074234 2018] [ssl:error] [pid 4508:tid 944] SSL Library Error: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate — No CAs known to server for verification? AH02008: SSL library error 1 in handshake SSL Library Error: error:140800FF:SSL routines:ssl3_accept:unknown state*

Отсюда вопрос - почему https нормально работает (реально шифрует и не ругается в браузере) при использовании SSLVerifyClient optional, а не работает с флагом require, и как сделать так, чтобы работал с require? Большое спасибо за консультации!

 , , ,

vega10 ()

Скрыть часть пути через htaccess

Допустим есть пути на сайте:
http://домен.ru/index.php/контроллер/метод/1
http://домен.ru/index.php/контроллер/метод/2
http://домен.ru/index.php/контроллер/метод/3
и т.д.
как сделать так, что бы пути были лишь http://домен.ru/1 такими, не затрагивая логики в скриптах, средствами htaccess?

 , ,

shiva ()

resolving ip в лог Apache2

Здравствуйте Lor.

Не могу понять в /etc/apache2/apache2.conf установлена директива HostNameLookups Off. В логе встретил следующие строчки:

mm-114-174-124-178.static.minsktelecom.by - - [04/Sep/2018:14:49:35 +0300] «GET /wa-data/public/shop/products/14/00/14/images/14/14.200x0.jpg HTTP/1.0» 200 3102 "http://www.block.by/category/silicat/" «Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36»

mm-130-56-212-37.vitebsk.dynamic.pppoe.byfly.by - - [04/Sep/2018:12:58:05 +0300] «GET /category/fundamentnye-bloki-fbs/ HTTP/1.0» 200 17185 "-" «Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36»

В остальных IP не разрешаются. Может есть у кого-нибудь мысли.

 

Serzis ()

Поиск узких мест в веб приложении

Добрый день. Есть прилага работающая на связке apache-tomcat + mysql+mongodb. Каждый день в разное время прилага начинает подвисать примерно на минуты 3 и потом отвисает или отвисает сразу, если рестартнуть монгу. Можете посоветовать статьи или готовые решения, или личный опыт в поиске узких мест и оптимизации работы подобных сервисов. Что бы начитаться и понять куда дальше копать и как с этим бороться. Решать данную проблему пока никто не хочет, но к этому рано или поздно прийдем, хотелось бы быть в курсе дела.

 , , ,

Flover ()

OnlyOffice - не хочет рабоать

Здравствуйте!

Хочу иметь возможность редактирования офисных документов в NextCloud. Для этого я выполнил несколько действий:

1. Использовал docker-контейнер:

$sudo docker run -i -t -d -p 8008:80 -p 8009:443 --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  onlyoffice/documentserver

2. Создал ключи и сертификаты для SSL:

$openssl genrsa -out onlyoffice.key 2048
$openssl req -new -key onlyoffice.key -out onlyoffice.csr
$openssl x509 -req -days 365 -in onlyoffice.csr -signkey $onlyoffice.key -out onlyoffice.crt
$mkdir -p /app/onlyoffice/DocumentServer/data/certs
$cp onlyoffice.key /app/onlyoffice/DocumentServer/data/certs/
$cp onlyoffice.crt /app/onlyoffice/DocumentServer/data/certs/
$cp dhparam.pem /app/onlyoffice/DocumentServer/data/certs/
$chmod 400 /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
$sudo docker restart onlyoffice/documentserver

3. Установил из магазина приложений в NextCloud интеграционное приложение и ввёл туда IP, получив следующие сообщения об ошибках: раз, два, три.

4. Создал issue на гитхабе тут, там же конфиги апача и лог контейнера.

Суть в том, что мол у себя попробовали и у них без HTTPS работает, а у меня нет и мне просто перестали отвечать =\

5. Сижу и думаю, что делать то?!

 , ,

AntonyRF ()

ISPConfig apache default virtualhost

Привет.

Есть vps с apache и opencart. Нормально работает, 2 конфига для http и https. Указывают на один каталог и там силами htaccess сделан редирект на https.

Захотел поставить ispconfig, который проживает обычно на отдельном порту (8080) и пытаюсь в него попасть. Вот тут странность, в конфиге ispconfig написано virtualhost _default_:8080, т.е. apache должен при запросе по этому порту перенаправлять на этот virtualhost. Но этого не происходит, при каждом запросе мне показывается сайт, а не панель.

Для проверки в обоих document root я создал файл test.php с разным содержимым (например, default и custom).

https://domain.tld/test.php → default
https://domain.tld:8080/test.php → default
http://ip:8080/test.php → bad request
https://ip:8080/test.php → default
В конфигах везде убрал _default_, заменив на *:443/*:80. Пробовал перенести на отдельный поддомен ispconfig, например: panel.domain.tld, порт 443 — открывает так же дефолтный сайт (т.е. SNI не работает, получается?). Не знаю что ещё предпринять.
root@domain:/etc/apache2/sites-enabled# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
*:8081                 domain.tld (/etc/apache2/sites-enabled/000-apps.vhost:8)
*:80                   domain.tld (/etc/apache2/sites-enabled/000-default.conf:1)
*:8080                 domain.tld (/etc/apache2/sites-enabled/000-ispconfig.vhost:6)
*:443                  domain.tld (/etc/apache2/sites-enabled/default-ssl.conf:2

 , ,

conformist ()

Веб морда для Nginx или Apache. URGENT!!!

Народ, никак не возьму в толк почему не могу найти веб морду, как для пхп май админ, только для нджинкс или апачи. Кто-нибудь знает что-нибудь подобное?

 , , , ,

Eugen_K ()

Apache редирект запроса на другой порт.

При следующем тексте в .htaccess получаю редирект с любого запроса типа http://www.site.com на https://www.site.com:4443


RewriteEngine On

RewriteCond %{HTTPS} !=on

RewriteRule ^/?(.*) https://%{SERVER_NAME}:4443/$1 [R,L]

Но если указать например запрос http://www.site.com:4443 то на https://www.site.com:4443 уже не перенаправляет. Подскажите какое должно быть регулярное выражение. Спасибо

 , ,

EvgeniusDragon ()

htaccess и реврайт одного файла в двух вариантах

Всем привет. Есть в каталоге с сайтом файл trueadmin.php, например.

Есть два запроса к сайту - один

GET /admin.php

другой

GET /admin.php?login=true

Первый надо отфутболить куда-нибудь на гугл, а второй направить на trueadmin.php. Собственно как это сделать?

Я сделал:

RewriteRule ^admin\.php https://google.com [L,R=301,NE]

но htaccess тут не учитывает аргументы, и если сделать запрос с login=true(или же с любыми другими аргументами, login=true как пример), то мы уйдём так же на гугл. Гуглил-гуглил, ничего особо не нашёл, буду рад если кто подскажет.

 ,

mahalaka ()

Web Server - резервирование .

Здравствуйте , подскажите каким образом можно обеспечивать зеркалирование / отказоустойчивость веб серверу ( веб сервер состоит из обычного Debian Apache ( Vhosts - для мультисайтовости) Mysql PHP ) и компьютера расположенном в другом месте . Так что бы если 1 компьютер выключился то нагрузка переключилась на другой и с полной синхронизацией бд и так далее .

 , , , ,

Rebbit ()

права на запись не работают

сервер убунту, апач+nginx, вордпресс, open_basedir не установлен

пытаюсь установить плагин и получаю ошибку

директория `/home/wp/wp-includes/upload` не доступна для записи.

права на директорию выставлены 777
создал пхп скрипт и файлы создались
mkdir('/home/wp/wp-includes/upload/zzz');
$h=fopen('/home/wp/wp-includes/upload/aaa', 'w');

где тут проблема?

 

kommersant ()

Apache и метод PUT

Здраствуйте! Поставил в virtualbox ubuntu, установил апач и php и не могу использовать метод PUT. 405 Method Not Allowed - The requested method PUT is not allowed for the URL... Apache/2.4.29 (Ubuntu 18.04). Понимаю что дело в конфиге, но что туда писать не знаю. В гугле попробовал с пяток решений, но все та же ошибка 405. Очень благодарен за помощь.

 ,

chichako ()