使用htaccess重定向两个文件

时间:2012-06-27 15:48:08

标签: php .htaccess redirect

这是我的情景。我的应用网址显示如下:

example.com/index.php/article/whatever/here

为了从url中删除index.php我把它放在我的.htaccess中并且工作正常:

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

现在,我的问题是我有这样的include和admin.php:

example.com/admin.php/manage/whatever/here

我不知道如何在没有与index.php发生冲突的情况下从url中删除admin.php,因为我已经尝试了这个并且显示了500内部服务器错误:

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

修改

另一个尝试是这个,没有,因为显示404错误:

RewriteEngine On   
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^/(.*?)/(.*) /$1/$2 [L]

我的所有网址都应该有几个参数:

example.com/this/is/a/large/url/because/is/requiered

编辑2:

我已经创建了两个规则,每个规则单独工作正常!但两者都无法合作:

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

2 个答案:

答案 0 :(得分:1)

尝试:

RewriteEngine On   
RewriteBase / 

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

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

然后至少用以下方法测试:

http://www.example.com/some/url
http://www.example.com/admin/some/url

答案 1 :(得分:0)

您可以稍微修改重写规则以捕获路径的第一部分,并在替换中使用它。试试这个:

RewriteRule ^/(.*?)/(.*) /$1/$2 [L]

基本上()会创建一个捕获组,因此前两个/之间的任何内容都将被捕获为$1,之后的任何内容都将被捕获为$2

请注意,如果您只希望此替换适用于index.phpadmin.php

,您也可以更改重写条件