.htaccess перенаправлять из корневого сайта сайта в общую папку, скрывая "общедоступный" URL-адрес?

Bellow - это структура моего сайта:

htdocs/
    My-Project/
        public/
            index.php
            css/
            img/
            js/
        src/
            config.php
            templates/
            library/

Я не хочу, чтобы какой-либо прямой доступ к любому файлу внутри каталога src не требовался. src содержит мои скрипты шаблонов и серверных логических систем.

Я хочу настроить свой .htaccess, чтобы пользователь, отправляясь на мой сайт (корневая папка My-Project), перенаправляется на My-Project/public/index.php. Я хотел бы, чтобы URL-адрес просто выглядел как My-Project.com, а на индексной странице.

Любая помощь? Я не решаюсь модифицировать свой файл .htaccess, поскольку вижу здесь множество противоречивых советов и в сети относительно наилучшего способа сделать это.

Ответ 1

Поместите этот код в /My-Project/.htaccess:

RewriteEngine On
RewriteBase /My-Project/

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]

RewriteRule ^((?!public/).*)$ public/$1 [L,NC]

Ответ 2

Добавьте следующую строку в первую строку вашего .htaccess

DirectoryIndex public/index.php public/index.html

Ответ 3

Я внес некоторые изменения в ответ @anubhava для работы на localhost и с дружественными URL-адресами.

Структура каталогов:

  • /(папка с локальным хостом)
    • MyApp/
      • публичный /
      • index.php
    • ядро ​​/
      • некоторые основные файлы...

myapp/.htaccess (корневая папка myapp)

RewriteEngine On
RewriteBase /myapp

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^(.*)$ public/index.php?$1 [L,QSA]

MyApp/государственные/.htaccess

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

MyApp/государственные/index.php

<?php
echo 'Hello<br>';
echo $_SERVER['QUERY_STRING'];

Некоторые запросы:

http://localhost/myapp/

Hello


http://localhost/myapp/post/new

Привет

пост/новый