2012-04-28 2 views
11

Я работаю над довольно сложным проектом, поэтому мне хотелось бы иметь структуру файлов/папок, которая имеет смысл.Сделать папку с веб-корнем подпапкой с .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 перенаправить, чтобы остановить несколько ссылок, индексированных в поисковых системах?

+0

Почему вы не можете изменить директиву 'DocumentRoot'? –

ответ

24

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

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

  1. Давайте добавим директивы в ваш .htaccess

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

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

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

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

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

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

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

    # other configuration parameters 
</VirtualHost> 
+1

Блестящий. На щедрость есть время, поэтому я вручу его вам, когда он закончит :). Большое спасибо за очень объяснительный ответ. – Avicinnian

+0

Очень хорошо объяснено! –

Смежные вопросы