0

我有一个自定义 Web 应用程序,文件结构如下所示:

/apps/calendar/frontend/index.php
/apps/calendar/frontend/view/index.php
/apps/calendar/backend/index.php
/apps/calendar/backend/edit/index.php
/apps/calendar/backend/add/index.php
/apps/calendar/backend/view/index.php

我正在尝试编写一个 .htaccess 文件来帮助重定向文件,这样他们就看不到“真实”路径。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^([^/\.]+)/(.*)/(.*)($|/$) /apps/$1/frontend/$2/$3 [NC,L]
RewriteRule ^([^/\.]+)/(.*)($|/$) /apps/$1/frontend/$2 [NC,L]
RewriteRule ^([^/\.]+)($|/$) /apps/$1/frontend/ [NC,L]

当我访问 localhost/calendar 时,它应该将重定向映射到 /apps/calendar/frontend/index.php。但是当我访问 localhost/calendar/add 时,它给了我一个 301(永久移动),然后在控制台中显示 localhost/apps/calendar/frontend/add/index.php 的完整页面。任何人都知道为什么会发生这种情况?或者有更好的方法来解决这个问题?这些应用程序可能有大量子目录,所以我并不特别热衷于为子目录组合制定规则。

如您所见,我还有一个 /admin 路径,它将加载应用程序的 /backend/ 部分。我会假设我可以用 /admin 的前缀做类似的代码?

4

1 回答 1

3

您可能也对这个问题感兴趣:创建类似于文件夹结构的博客文章链接。

鉴于您.htaccess位于域的根文件夹中/home/youraccount/public_html/.htaccess,它看起来像这样:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/(admin|apps) [NC]
RewriteCond %{DOCUMENT_ROOT}/apps/$1 -d
RewriteRule ^([^/]+)/?(|.*)$ /apps/$1/frontend/$2 [NC,L]

RewriteCond %{REQUEST_URI} !^/apps [NC]
RewriteCond %{DOCUMENT_ROOT}/apps/$1 -d
RewriteRule ^admin/([^/]+)/?(|.*)$ /apps/$1/backend/$2 [NC,L]

假设用户访问:

http://domain.com/calendar
http://domain.com/calendar/
http://domain.com/calendar/add

以上所有内容将重定向到

/apps/calendar/frontend/index.php
/apps/calendar/frontend/index.php/
/apps/calendar/frontend/index.php/add

如果用户访问:

http://domain.com/calendar/admin
http://domain.com/calendar/admin/
http://domain.com/calendar/admin/add

它会去:

/apps/calendar/backend/index.php
/apps/calendar/backend/index.php/
/apps/calendar/backend/index.php/add

所以它会让index.php你的控制器为每一端:

/apps/calendar/frontend/index.php
/apps/calendar/backend/index.php
于 2013-09-27T08:04:54.710 回答