htaccess regex return Internal Server Error - PullRequest
       7

htaccess regex return Internal Server Error

0 голосов
/ 07 февраля 2020

Я новичок в мире apache & php, и я борюсь с перенаправлениями .htaccess. Вот что я хочу сделать: у доверенных лиц будет доступ к выделенному каталогу в / members .

/ => index.php
/<user> => /members/<user>/index.{php,html}
/<user>/... => /members/<user>/...
/<user>/reload = > index.php?reload=<user>

Макет каталога:

- index.php
- .htaccess
- members/
  - <user1>/
    - member's html/php
  - <user2>/

Что я сделал до сих пор (не работает):

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.subdomain.exemple\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.subdomain.exemple.com/$1 [R,L]

RewriteCond %{HTTP_HOST} ^subdomain.exemple\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.subdomain.exemple.com/$1 [R,L]


RewriteRule ^/$ index.php [L]
RewriteRule ^$ index.php [L]

# [a-z]+ is member's username
RewriteRule ^([a-z]+)/reload/$ index.php?reload=$1 [L]
RewriteRule ^([a-z]+)/reload$ index.php?reload=$1 [L]


#ROOT (I don't know how to redirect to php or html depending on which file exists)
RewriteRule ^([a-z]+)/$ members/$1/index.php [L]
RewriteRule ^([a-z]+)$ members/$1/index.php [L]

#Every other URL excluding / and /<user>/reload
RewriteRule ^(.+)$ members/$1 [L]

Я также хочу "изолировать" членов 'каталог, запретив php сценариям доступ к родительским каталогам. Я нашел это, но значит ли это, что я должен написать правило для каталога каждого участника?

<Directory /parentDirectory/childDirectoryOne>
 php_admin_value open_basedir "/parentDirectory/childDirectoryOne"
</Directory>

1 Ответ

0 голосов
/ 09 февраля 2020

Мне наконец удалось заставить это работать. Чтобы избежать l oop, упомянутого @arkascha, я добавил отрицательный прогноз (?!members). Но на сайте root индекс. php был перенаправлен на /members/index.php. Поэтому я добавляю второй негативный взгляд (?!index.php). Последняя борьба заключалась в том, чтоemple.com/user был перенаправлен наemple.com/members/user. Не могу решить это нарочно, но это работает. Вот окончательный код:

RewriteRule ^(?:members)?([a-z]+)/reload/?$ index.php?reload=$1 [L]
RewriteRule ^(?!members)(?!index.php)(.+)$ members/$1 [L]

Что касается "изоляции" каталогов участников, у меня все еще нет решения.

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