htaccess重写url - 从url中删除文件夹名称

时间:2011-01-17 19:27:02

标签: apache .htaccess mod-rewrite

我正在尝试为这种情况重写一个htaccess url:

www.website.com/index.php/admin/something => www.website.com/admin/something
www.website.com/index.php/website/something => www.website.com/something
www.website.com/index.php/login/something => www.website.com/login/something

注意:“某事”可以是“something1 / something2 / something3”或“something1 / something2”或“something”

我可以用“

”剪切“index.php”
RewriteEngine on

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

但是我找不到一种方法只删除“website /”而不是“admin /”和“login /”留下其余的url。

1 个答案:

答案 0 :(得分:0)

如果采用这种方法,您可能必须指定不应映射到“网站”控制器的每个可能的输入引用,并将其重新映射到index.php / $ 1并处理每个其他请求,就像它是网站的方法一样控制器,将其映射到index.php / website / $ 1

下面的内容会将以admin或login开头的任何内容映射到index.php以及其他所有内容到网站控制器:

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

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