这是我的目录结构:
/.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
非常感谢任何见解。
答案 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]