将文档根目录设置为子目录,重定向到索引.php

时间:2015-08-11 20:08:08

标签: apache .htaccess mod-rewrite

这是我的目录结构:

/.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目录是文档根目录,即使vhost也有/作为文档根目录。因此,/public/*不应出现在网址中。

基本上我需要/.htaccess重写/public/中的现有文件(即我请求/js/main.js并且它提供文件/public/js/main.js)或运行{{1}如果没有匹配的文件。

我需要/public/index.php来提供/public/somedir/.htaccess中存在的文件,同时从URI的前面删除/public/somedir,或者如果uri {则提供/public如果这些条件都不成立,则匹配{1}}或提供/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 好的

/ => /public/index.php好的

/nofile => /public/index.php好的

/js/main.js => /public/js/main.js好的

/somedir/js/script.js => /public/somedir/js/script.js但是重定向到/somedir BAD

/public/somedir/index.html => /public/somedir/但应该提供/somedir/api/test BAD

非常感谢任何见解。

1 个答案:

答案 0 :(得分: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]