Apache переписать htaccess в subdir - PullRequest
0 голосов
/ 02 июня 2018

позвольте мне перейти к сути.

У меня есть проект php с такой структурой

ROOT
.htaccess
--api/
----public/
------index.php
------test.html
--backoffice/

И я хочу использовать index.php для api / public длязаставить его работать как

domain.com/api/index.php 

вместо

domain.com/api/public/index.php 

Я безуспешно пытался переписать базу или переписать .htaccess, я что-то упустил?положить .htaccess в неправильный каталог?Я должен использовать несколько файлов .htaccess?

ОБНОВЛЕНО : Итак, я получил два файла .htaccess, и теперь я могу получить доступ с помощью URL домена domain.com/api/index.PHP, но он выдает 401, это что-то ... с другой стороны, я могу получить доступ к файлу test.html, расположенному в / api / public с текущим url domain.com/api/test.html

Здесьтакое файл .htaccess
domain.com / api / .htaccess

RewriteEngine On
RewriteBase /api/public/
RewriteCond %{REQUEST_URI} !^/api/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /api/public/$1

domain.com / api / public / .htaccess файл

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

1 Ответ

0 голосов
/ 03 июня 2018

Я думаю, что вы можете использовать отдельный .htaccess файл in your API folder с правилом, подобным следующему:

RewriteRule ^$ /public [R=301,L]

Так что это должно перенаправить внутренне в подпапку public

ROOT
  | --api/
  |     |-- .htaccess 
  |     |-- public/
  |             |-- index.php
  |-- backoffice/

Update1

Я думаю, в вашем случае это должно работать

RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/(.*)$ /api/public/$1 [L]

Это зависит также от используемой вами системы и предустановки.

Update2

Я провел некоторый тест на XAMPP и получил следующий результат

Поместите ваш .htaccess в ROOT folder, delete все остальные .htaccess files in subfolders.Переименуйте api в _api или что-то еще, как вам нравится

ROOT
  | --.htaccess
  | --/_api/  <<<------- rename
  |     |-- /public/
  |             |-- index.php
  |-- /backoffice/

, добавьте .htaccess в root

RewriteEngine On
Options FollowSymLinks

RewriteBase /
DirectoryIndex index.php index.html

RewriteRule ^api2/(.*)$ /api/public/$1 [B,L,QSA]

Позвоните как раньше yoursite.com/api

Этот сценарий работал на моей тестовой системе, как и ожидалось.Попробуйте.

...