htaccess与Kohana 3.1.x无法正常工作

时间:2011-06-28 02:37:53

标签: .htaccess kohana-3

我需要能够在没有Kohana框架干扰的情况下访问/ admin_dir下的所有内容,因为admin_dir根本不使用该框架。

首先,这是我的.htaccess文件:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

#Allow the admin page to be accessed
RewriteRule ^/?admin_dir(.*) admin_dir$1 [L]

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

这是Kohana附带的.htaccess文件,减去了admin_dir规则的添加。但是,无论我做什么,我都无法访问admin_dir。我得到一个Kohana异常,说如果我尝试访问/admin_dir/index.php它找不到匹配的路由,或者如果我尝试访问/ admin_dir则找不到URL。

我似乎能够访问admin_dir的唯一方法是注释掉.htaccess的最后一行。 admin_dir不是Kohana框架的一部分,所以我只是想一起绕过它。我在SO上发现了类似的帖子,但没有任何对我的情况有用。

修改 我在admin_dir /中有一个.htaccess文件用于密码保护。内容如下:

AuthType Basic
AuthName "Admin Page"
AuthUserFile "/home/mysite/.htpasswds/public_html/beta/admin_dir/passwd"
require valid-user

在此先感谢您的帮助,这对我来说已经过了太久了!

布赖恩

3 个答案:

答案 0 :(得分:1)

显然在我的admin_dir目录中有.htaccess是导致我的问题的原因。我不知道为什么或如何,但在对根.htaccess文件进行少量更改并删除密码保护后,它现在全部正常工作......除了没有密码保护。 :(我想我只需要为它写一个愚蠢的小认证东西。

以下是我们对根.htaccess文件所做的修改:

...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/admin_dir.* [OR] 
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]


谢谢大家的帮助!

布赖恩

答案 1 :(得分:0)

评论

RewriteRule ^ /?admin_dir(。*)admin_dir $ 1 [L]

当您尝试访问http://domain.com/admin_dir/index.php时解决问题?

答案 2 :(得分:0)

以下规则将告诉Apache不要对以admin_dir

开头的网址进行任何网址重写
RewriteRule ^admin_dir.* - [L]

如果它仍然不起作用(它在我的测试框中确实可以正常工作),请尝试删除前导^ - 它不太准确(因为它也会被some_admin_dir触发)但是只要admin_dir在整个网站中是唯一的(没有其他网址有该文本),那么它应该没问题。


<强>更新 您可以尝试将其放入/admin_dir的.htaccess中 - 值得尝试:

RewriteEngine On
RewriteBase /admin_dir/

# stop rewriting if file/folder exist
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]