如何根据控制器名称重定向到子文件夹,传递URL的其余部分

时间:2015-03-09 04:23:41

标签: php wordpress .htaccess codeigniter mod-rewrite

我有一个像这样的目录地图

root
---.htaccess
---site    
------application
------css
------...
---blog
...

我在这台服务器上运行Codeigniter,我的网站和其他内容都在应用程序文件夹中。我想在同一台服务器上运行一个wordpress博客,但是在兄弟文件夹中。

mysite.com/controller/action/parameter1/...之类的所有请求都必须调用site/application文件夹中的controller.php,并按预期触发传递parameter1,parameter2等的操作。

除非"控制器"是"博客"。像mysite.com/blog这样的请求必须重定向到blog/文件夹,传递所有参数,以及我将要运行WP的位置

关于如何编写.htaccess的任何想法?目前我得到以下内容(我仍然创建了siteblog文件夹,所有codeigniter文件都在根目录中)

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|styles)
RewriteCond $1 !\.(ico|js|css|jpg|png|gif|html|ico?g)$
RewriteRule ^(.*)$ index.php/$1 [L]

1 个答案:

答案 0 :(得分:1)

只需将blog从您的codeigniter规则中排除为

即可
RewriteCond $1 !^(blog/?$|index\.php|images|robots\.txt|styles)
RewriteCond $1 !\.(ico|js|css|jpg|png|gif|html|ico?g)$
RewriteRule ^(.*)$ index.php/$1 [L]

或者,您可以使用

排除所有现有文件和目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

将域映射到各自的文件夹(假设名称匹配)

RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+)\.com [NC]
RewriteRule ^(.*)$ /%1/$1 [L]

因此,blog.com/post会转到/blog/postsite.com/page会转到/site/page