我正在尝试使用重写规则来访问两个目录。我抓住并测试了很多来自在线和其他SO帖子的代码,但我最终得到的仍然无法正常工作。这就是我要做的事情:
1)如果页面请求是针对/ home,/ test,/ 404,/ etc,则从/ app目录加载文件并遍历如下:/ home,/ news / topics / post,/ contact /,/博客/类别/日期/后
2)如果页面请求仅适用于/ admin,则从/ admin目录加载文件并能够遍历如下:/ admin或/ dashboard,/ admin / page / edit,/ admin / page /删除,/ admin / page / create,/ admin / section / delete /
发生了什么事? 如果我去/家或只是/,工作得很好!但如果我到/ test,/ contact,/ admin,/ etc我得到一个404文件未找到
文件结构(虽然可以更改):
/admin
--dashboard.php
/app
--index.php
.favicon.png
.favicon.ico
.htaccess
我开始认为像这样对重写进行硬编码可能会更好:
RewriteRule ^home$ /atlas.php [NC,L]
RewriteRule ^admin$ /admin/dashboard.php [NC,L]
......但我想在我放弃这个社区之前,我是否能够帮助SO社区。 p>
有什么建议吗?
我目前的代码:
Options -Indexes
Options -MultiViews
Options +FollowSymLinks
# Set the default site page
DirectoryIndex /app/index.php home
# Rewrite Rules and Conditions
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Remove www
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L,NC]
# Assets are in /app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|svg|swf)$ /app/$1.$2 [L,NC]
# First, check if request is to site pages, which is in /app/
RewriteCond %{DOCUMENT_ROOT}/app%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/app%{REQUEST_URI} -d
RewriteRule ^(.*)$ /app/index.php?/$1 [NC,L]
# Second, check if request is to /admin, which is in /admin/
RewriteCond %{DOCUMENT_ROOT}/admin%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/admin%{REQUEST_URI} -d
RewriteRule ^(.*)$ /admin/dashboard.php?/$1 [NC,L]
# Default to /app
RewriteCond ${REQUEST_URI} !^/app/
RewriteRule ^(\w+)$ /app/$1 [L]
</IfModule>
答案 0 :(得分:0)
我认为你可以做到:
#admin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/admin(.*)$ /admin_handler.php?path=$1 [QSA]
#app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /app_handler.php?path=$1 [QSA]
如果您的所有网址都需要/app
,为什么不将/app
放入其中?在重写中添加它是毫无意义的。
当你重写它时,有一个单一入口点非常棒,因为你只需要重写该文件的所有内容并让PHP处理它。弄清楚PHP中的请求比mod_rewrite
更容易。此设置现在有两个入口点,一个用于访问者,一个用于管理员,但您甚至可以将它们合并为一个。