一个站点上有多个Mod_ReWrites - 可能吗? (根目录中的Wordpress博客,子目录中的CodeIgniter项目)

时间:2010-03-31 03:51:01

标签: apache wordpress .htaccess mod-rewrite codeigniter

目前我正在使用CodeIgniter创建一个项目,该项目包含在我的域的子目录中。对于此示例,我们将其称为domain.com/test。

我也在这个域上安装了Wordpress,并且它的所有文件都在根目录中。例如,如果您导航到我的domain.com,那么它会启动Wordpress博客。我目前已激活Wordpress mod_rewrite,因此它使用友好URL。

对于那些不熟悉CodeIgniter的人,所有请求都通过项目根文件夹中的index.php进行路由。所以,在这种情况下,它是domain.com/text/index.php。将发送对应用程序的请求,如domain.com/test/index.php/somecontroller/method。

我想做的是,针对任何针对/ test /文件夹的传入请求,或其中的某个子目录,我希望它适当地重写URL,以便不包括index.php。 (根据上面的例子,它最终是domain.com/test/somecontroller/method)

对于任何其他请求,意味着不在/ test /目录中的任何内容,我希望它将请求路由到Wordpress。

我认为这是一个简单的RewriteCond,它可以检查请求是针对/ test /目录还是其中的子目录,但我不知道该怎么做。也许每个站点不能有多套重写规则。

我将为每个应用程序包含推荐的mod_rewrite规则。

Wordpress :(目前使用)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

CodeIgniter :(从Wiki拉出来)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

非常感谢任何和所有帮助!!

谢谢,

-Sootah

1 个答案:

答案 0 :(得分:1)

@ Myself and Stormdrain - 正如我在上面的评论中所述(并由Stormdrain阐述),只需将CodeIgniter .htaccess放在/ test /子目录中就可以了。

啊,我还应该注意到我必须修改CodeIgniter .htaccess BasePath行:     RewriteBase /

到此:     RewriteBase / test /

希望这可以帮助其他有相同/类似问题的人。

- Sootah