2015-08-11 5 views
0

Вот моя структура каталогов:Установить корневой документ в подкаталог, перенаправлять индексировать .php

/.htaccess 
/public/ 
/public/.htaccess 
/public/index.php 
/public/js/main.js 
/public/somedir 
/public/somedir/.htaccess 
/public/somedir/index.html 
/public/somedir/js/script.js 

В принципе, мне нужно, чтобы она появилась, что каталог /public является корневым документом, даже ВХост имеет то, что здесь / как корень документа. Поэтому /public/* НЕ должен отображаться в URL-адресе.

В принципе мне нужно /.htaccess либо переписать существующий файл в /public/ (т.е. я прошу /js/main.js и служит файл /public/js/main.js) или запустить /public/index.php, если не существует соответствующий файл.

мне нужно /public/somedir/.htaccess служить файл, если он существует в /public/somedir, а также удаление /public из передней части URI, или служить /public/index.php если УИР /somedir/api/* подобран, или служить /public/somedir/index.html, если ни одно из этих условий верно.

Вот источник /public/somedir/.htaccess:

RewriteEngine on 
Options +SymLinksIfOwnerMatch 

RewriteCond %{REQUEST_URI} ^/somedir/api 
RewriteRule^../index.php [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule^index.html [L] 

Вот источник /public/.htaccess:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /index.php 

А вот источник /.htaccess:

RewriteEngine On 

RewriteRule ^(.*)$ /public/$1 

И вот поведение где => означает «запрос» => «подавать s ":

/ =>/public/index.php ХОРОШО

/nofile =>/public/index.php ХОРОШО

/js/main.js =>/public/js/main.js ХОРОШО

/somedir/js/script.js =>/public/somedir/js/script.js ХОРОШО

/somedir =>/public/somedir/index.html НО перенаправляет /public/somedir/ BAD

/somedir/api/test =>/public/somedir/index.html НО должен служить /public/index.php BAD

Любое понимание очень ценится.

ответ

0

public/somedir/.htaccess Ваш должен быть:

Options +SymLinksIfOwnerMatch 
RewriteEngine on 

RewriteCond %{REQUEST_URI} /somedir/api [NC] 
RewriteRule^../index.php [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.html [L] 

и /public/.htaccess:

DirectorySlash Off 
RewriteEngine on 

# add a trailing slash to directories 
RewriteCond %{DOCUMENT_ROOT}/public/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302] 

RewriteRule ^(.*)$ /public/$1 [L]