2009-12-03 109 views
1

我在我的小PHP框架中使用.htaccess和mod_rewrite。它工作得很好,但我想扩大只是将所有内容重定向到index.php。.htaccess URL重写帮助!

我的目录结构是这样的(显然简体)

apps 
media 
system 
-- admin 
jscript 
templates 

我现在的重写规则是:

RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

正如你所看到的,一切都mydomain.com/url'被重定向到index.php。我现在想要做的是允许任何'mydomain/admin /'指向'system'文件夹内的'admin'目录。我也想在这个文件夹中使用正常的条件,所以我不会使用干净的用户,而是使用像'mydomain.com/admin/some-kind-of-file.php'这样的URL。

简而言之,我只希望我的重写条件适用于除我的系统/管理文件夹之外的所有内容。

这可能吗?任何帮助将不胜感激!

+0

请提供3个“来自”URL的列表,以及重写后它们应该是什么样子。例如。 'mydomain.com/admin/blah.php' =>'mydomain.com/system/admin/blah。因为你的要求没有那么清楚。 – 2009-12-03 22:57:30

+0

对不起,我会尽力解释一下。我希望任何'mydomain.com/admin'查看'system/admin'文件夹。示例: 'mydomain.com/admin/install.php'=>'mydomain.com/system/admin/install.php' 'mydomain.com/admin/subfolder/blah.php'=>'mydomain.com/ system/admin/subfolder/blah.php' – Hanpan 2009-12-03 23:01:01

回答

1

看来,以下内容仅适用的重写规则,如果网址不启动,site.com/mediasite.com/jscript


RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

我会说实话,我从来没有见过在RewriteCond使用,直至现在$1,但似乎有趣。

那么,如果你的网址是site.com/admin...?那么你需要一个新的RewriteRule。此外,您还需要防止以admin开头的URL由第一个RewriteRule重定向。


RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript|admin|system) 
RewriteRule ^/?(.*)$ index.php/$1 [L,R] 

RewriteRule ^/?(admin.*)$ system/$1 [L,R] 

更新1:添加system到不应该被应用到第一RewriteRule的URL列表。

更新2:从第一RewriteRule除去[L,QSA]并用[L,R]替换。

+0

奇... mydomain.com/admin/test.php 重定向到: mydomain.com/system/admin/?install.php 同样,不知道那里的?来自!也许我的apache安装有问题。我不明白为什么这不起作用! – Hanpan 2009-12-03 23:15:34

+0

^/? < - 为什么?之前(管理员*) - 可以成为它的一部分吗? – Meep3D 2009-12-03 23:30:59

+0

我可能是错误的主导斜线。我不确定Apache如何处理它,因为它是浏览器请求的URL的一部分。我只是想让一个前导斜杠可选('?'是一个正则表达式运算符,意思是零或一)。 – 2009-12-03 23:40:01

2

只需添加admin以你的条件,并使用一个额外的规则来重定向它:

RewriteCond $1 !^(index\.php|media|jscript|admin)/ 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
RewriteRule ^admin/.* system/$0 [L] 
+1

将追踪斜线添加到RewriteCond是一个不错的主意,不同之处在于它会尝试匹配“index.php /” – Nick 2009-12-03 23:01:23

1

看来你的“媒体”和“JScript的”文件夹已经从重写规则豁免,你能不能只添加'admin'文件夹呢?例如:

RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript|admin) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

如果要真正地重定向一切都在/管理员/系统/管理(这将更新用户的浏览器的URL也行),你会使用一个mod_alias中的规则是这样的:

RedirectMatch permanent ^/admin/(.*)$ http://mysite.com/system/admin/$1 
+0

感谢您的答复Nick。如果我的帖子不明确,我很抱歉。 admin文件夹是'system'文件夹的一个子目录,这意味着上述不起作用。虽然我可以让系统/管理员作为重写条件,但我想实际上将任何mydomain.com/admin重定向到mydomain.com/system/admin – Hanpan 2009-12-03 23:08:08

+0

我误解了这个问题......编辑过的帖子做了我认为你是 – Nick 2009-12-03 23:41:16

1

重定向市民前往管理员文件夹,然后再过滤休息,如:

RewriteRule ^admin/([^/]*)$ system/$1 [L,QSA] 

RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
+0

我原本试过这个,有趣的。由于某种原因,它不起作用。如果我输入以下内容: mydomain.com/admin/ 它将我重定向到此处: mydomain.com/system/admin/? 我不知道在哪里?来自! – Hanpan 2009-12-03 23:11:35

+0

试试这个: http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/ 在过去的一年里,我有一份复制粘贴到我的墙上。 – Meep3D 2009-12-03 23:29:13