1

Тема: .htaccess: Page not Found при перенаправленні на index.php

Мені необхідно що б всі запити до існуючих і неіснуючих каталогів/підкаталогів і файлів сайту, перенаправлялися до basic/api/index.php.
Коли я пишу

test-site.com/basic/api //або test-site.com/basic/api/index.php

то відкривається Hello World в basic/api/index.php як мені і потрібно.

АЛЕ, коли я вписую наступні посилання:

test-site.com/basic/api/src/    
test-site.com/basic/api/src/db/  
test-site.com/basic/api/src/db/dbconnect.php  
test-site.com/basic/api/src/app/  
test-site.com/basic/api/src/app/routes.php  
test-site.com/basic/api/src/bootstrap/  
test-site.com/basic/api/src/bootstrap/app.php  
test-site.com/basic/api/non-existent-folder/  //неіснуюча директорія
test-site.com/basic/api/non-existent-file.php //неіснуючий файл

то у браузері відображається Page Not Found, замість Hello World в basic/api/index.php!
Зрозуміло, що справа в .htaccess, але вже тиждень не можу його налаштувати подібним чином, тому прошу допомоги, так як ніхто не міг до цього вирішити цю задачу...

Скрін проблеми
https://preview.ibb.co/ds5Nzc/image.jpg

.htaccess

RewriteEngine On
RewriteBase /basic/ 
RewriteCond %{REQUEST_FILENAME} !/api/index\.php
RewriteRule ^(.*)$ api/index.php

Структура проекту
https://image.ibb.co/npiWsx/str.jpg

Логи при переході на test-site.com/basic/api/src/db/dbconnect.php (приклад)

[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace3] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] strip per-dir prefix: C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/api/src/db/dbconnect.php -> api/src/db/dbconnect.php
[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace3] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] applying pattern '^(.*)$' to uri 'api/src/db/dbconnect.php'
[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace2] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] rewrite 'api/src/db/dbconnect.php' -> 'api/index.php'
[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace3] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] add per-dir prefix: api/index.php -> C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/api/index.php
[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace2] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] trying to replace prefix C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/ with /basic/
[Mon Mar 19 17:28:30.697115 2018] [rewrite:trace1] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11e7590/initial] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] internal redirect with /basic/api/index.php [INTERNAL REDIRECT]
[Mon Mar 19 17:28:30.698115 2018] [rewrite:trace3] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11ef7e8/initial/redir#1] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] strip per-dir prefix: C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/api/index.php -> api/index.php
[Mon Mar 19 17:28:30.698115 2018] [rewrite:trace3] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11ef7e8/initial/redir#1] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] applying pattern '^(.*)$' to uri 'api/index.php'
[Mon Mar 19 17:28:30.698115 2018] [rewrite:trace1] [pid 11760:tid 1192] mod_rewrite.c(468): [client 127.0.0.1:64697] 127.0.0.1 - - [test-site.com/sid#dd1c90][rid#11ef7e8/initial/redir#1] [perdir C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/] pass through C:/Program Files (x86)/Apache2.4/htdocs/test-site.com/www/basic/api/index.php

2 Востаннє редагувалося Lace (19.03.2018 19:19:05)

Re: .htaccess: Page not Found при перенаправленні на index.php

В мене це спрацьовує

RewriteEngine On
RewriteBase /basic/
RewriteCond %{REQUEST_FILENAME} !/api/index\.php
RewriteRule ^(.*)$ /api/index.php
Подякували: leofun011

3

Re: .htaccess: Page not Found при перенаправленні на index.php

Lace написав:

Таке потрібно?

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ /api/index.php

Дякую за відповідь, але таке я спробував з самого початку. В такому випадку, в браузері відкривається той файл, який є в кінці запиту. Тобто, якщо я пишу такий запит

test-site.com/basic/api/src/db/dbconnect.php

то вікривається пуста сторінка (логічно, так як там йде підключення с БД), а потрібно щоб відкривалась test-site.com/basic/api/index.php

4

Re: .htaccess: Page not Found при перенаправленні на index.php

Дякую за відповідь, але таке я спробував з самого початку

Я трохи неуважно прочитав те, що вам потрібно було. Пост вище я виправив, спробуйте той код, повинно працювати.

5

Re: .htaccess: Page not Found при перенаправленні на index.php

Lace написав:

В мене це спрацьовує

RewriteEngine On
RewriteBase /basic/
RewriteCond %{REQUEST_FILENAME} !/api/index\.php
RewriteRule ^(.*)$ /api/index.php

А ось в даному випадку в мене з'являється

Not Found
The requested URL /api/index.php was not found on this server.

У Вас використовуєтся VirtualHost? Які налаштування сервера? Можете скинути свій тестовий проект будь-ласка?
Може це в мене проблема з налаштуванням сервера... Я вже не знаю що думати.

6

Re: .htaccess: Page not Found при перенаправленні на index.php

Тестував на OpenServer зі стандартними налаштуваннями.

7

Re: .htaccess: Page not Found при перенаправленні на index.php

Lace написав:

Тестував на OpenServer зі стандартними налаштуваннями.

В мене Apache2.4 на якому налаштований VirtualHost.
Зможете скинути свій тестовий проект?