Сделать веб-корневую папку суб-папкой с .htaccess?

Я работаю над довольно сложным проектом, поэтому мне хотелось бы иметь структуру файлов/папок, которая имеет смысл.

Структура папки/файла, которую я хотел бы иметь, это:

.htaccess
/php/
/assets/

Я хотел бы иметь веб-страницы, к которым люди будут обращаться:

/php/views/pages/

Мне интересно, можно ли использовать только .htaccess для установки /php/views/pages в качестве "видимого корня", так что, например, когда люди посещают http://mydomain.com/, они будут просматривать http://mydomain.com/php/views/pages/index.php, а если так, как бы я это сделал?

Кроме того, можно ли канонизировать весь доступ к /php/views/pages с помощью .htaccess и перенаправить 301, чтобы остановить несколько ссылок, индексированных в поисковых системах?

Ответ 1

Если у вас нет доступа к конфигурации вашего хоста

DocumentRoot может использоваться только в конфигурациях сервера и виртуального хоста .htaccess он должен быть.

  • Пусть добавляются директивы в ваш .htaccess

    RewriteEngine on
    
  • Я предполагаю, что вы хотите, чтобы запросы/активы проходили через

    #if a match for asset is found, do nothing
    RewriteRule ^assets/ - [L]
    
  • Если запрос пытается получить доступ к /php/views/pages/ напрямую, перенаправляет его на свою каноническую версию

    RewriteCond %{THE_REQUEST} php/views/pages/
    RewriteRule ^php/views/pages/(.*) http://mydomain.com/$1 [R=301,L]
    
  • И добавьте правило, чтобы сопоставить все остальное с /php/views/pages/

    RewriteCond %{REQUEST_URI} !php/views/pages/
    RewriteRule ^(.*)$ /php/views/pages/$1 [L]
    

Если у вас есть доступ к конфигурации вашего хоста

Забудьте о файлах .htaccess и используйте их. Пример конфигурации может выглядеть как

# ~base stands for your original DocumentRoot
<VirtualHost *:80>
    DocumentRoot ~base/php/views/pages
    Alias /assets ~base/assets

    # other configuration parameters
</VirtualHost>