使用admin route时更改默认index.php

时间:2014-05-09 20:42:36

标签: php .htaccess mod-rewrite autoload

我目前正在开展一个项目,在尝试找到解决我碰到的一个小问题的解决方案后,让我头疼不已。

目前,我的应用程序在我获取的每个页面请求上加载我的index.php文件。在我的索引中,应用程序启动一些基本的东西,设置一些变量等。 好吧,我目前正在寻找的是我想让我的服务器加载一个不同的文件(例如admin.php)作为默认值。但是,只有当url子目录设置为http://www.mydomain.com/admin/

时才需要这样做

所以服务器需要处理完全相同的每一件小事,但是当路由设置为/ admin /时,它需要自动加载admin.php而不是默认的index.php。

目前我的.htaccess文件看起来像这样

# mod-rewrite engine
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

编辑:要清理一下并将其可视化一点:

在这两个文件中,我加载了一个新的Zend_Application(ZF1)

3 个答案:

答案 0 :(得分:1)

您是否尝试过以下RewriteRule:

RewriteRule ^admin/?$ admin.php [L]

你的.htaccess看起来很喜欢:

# mod-rewrite engine
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^admin/?$ admin.php [L]
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

更新1

如果您按以下顺序尝试RewriteRules:

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*(admin).*$ admin.php [NC,L]
RewriteRule ^.*$ index.php [NC,L]

答案 1 :(得分:0)

这应该可以解决问题:

RewriteEngine On

# handle requests to /admin/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^.*$ admin.php [NC,L]

# handle all other requests
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

答案 2 :(得分:0)

为了解决问题,你可以使用一个有条件地包含文件的常见boostrap脚本。例如:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ bootstrap.php [NC,L]

然后,在bootstrap.php中

<?php

if(USER_IS_ADMIN){
  require('admin.php');
}else{
  require('index.php');
}

如果您确实需要通过htaccess进行检查,您可能希望看到this SOF thread