【发布时间】:2015-11-04 05:24:36
【问题描述】:
这是我的目录结构:
/.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 中,我需要/public/somedir/.htaccess 来提供文件,还要从URI 的前面删除/public,或者如果uri /somedir/api/* 匹配,则提供/public/index.php,或者提供服务/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 => /public/somedir/index.html 但是重定向到/public/somedir/ 不好
/somedir/api/test => /public/somedir/index.html 但应该服务于/public/index.php BAD
非常感谢任何见解。
【问题讨论】:
标签: apache .htaccess mod-rewrite