mod_rewrite用于codeigniter中的多个应用程序

时间:2012-07-03 15:18:09

标签: php .htaccess codeigniter url-rewriting codeigniter-url

我是url re-writng的新手,目前在codeigniter中为多个应用程序重写url时遇到了问题。我已经用一些可能的答案扫描了整个stackoverflow,但它仍然没有完全解决我的问题

我在根目录的目录是这样的

  • -application
  • - 管理员
  • - 前端

我正在寻找的是我的用户访问我的网站(前端)http://www.mydomain.com/而我的管理员(后端)为http://www.mydomain.com/admin/

我现在的.htaccess就是这样

<IfModule mod_rewrite.c>
    RewriteEngine On
# If the user types just "admin".
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin$ administrator.php [L,QSA]

# If the user enter in any admin section, like "admin/section".
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin\/(.*)$ administrator\.php/$1 [L,QSA]

# If the user types any site section, like "site/section".
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index\.php/$1 [L,QSA]

    ErrorDocument 404 /index.php
</IfModule> 
来自CodeIgniter multi-application .htaccess problem

代码

我可以通过上面的.htaccess在前端得到我想要的东西,但我不能让它在我的后端工作。基本上,www.domain.com/admin给出了404页面找不到错误。

请就此问题向我提出建议。另外,请指导我在哪里放置这个.htaccess文件?在根?在应用程序文件夹中?或分别在前端和管理员文件夹中。

非常感谢。

问候。

2 个答案:

答案 0 :(得分:0)

为什么在你的根目录中没有这样的东西。

RewriteEngine on
RewriteCond $1 !^(index\.php|update\.php|assets|admin|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

这基本上会忽略任何目录,例如“admin”以路由到前端应用程序。您必须设置config.php并从控制器中删除index.php。

答案 1 :(得分:0)

找到了解决此问题的方法。这不是一种非常聪明的方式,但它至少有效。

首先,我在根目录中创建了一个'admin'文件夹,其中包含应用程序index.php的副本 这有效地使我的目录看起来像这样。

    -admin
    --.htaccess
    --index.php
    -application
    --frontend
    --administrator
    -index.php
    -.htaccess

对于此解决方案,您需要在不同位置拥有两个.htaccess文件。 对于root的.htaccess,它看起来应该是这样的。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|update\.php|administrator\.php|assets|admin|robots\.txt|favicon\.ico)
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

对于admin文件夹中的.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^/(.*)$ index.php/$1 [L]

        RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]


</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

虽然这适用于localhost,但值得注意的是,它可能无法在租用的服务器上运行,因为主机中的文件系统可能不同。