CodeIgniter:添加自定义重写规则以从静态文件重定向到控制器

时间:2015-08-05 13:45:38

标签: .htaccess codeigniter mod-rewrite

假设我有一个静态应用程序和一个提供它的JSON文件。

问题是JSON文件现在还不可用而且我无法使用它,因此,为了使应用程序在开发环境中运行,我想添加一个重写规则来将JSON请求重定向到CI控制器路径这也会返回一个JSON。

我的htaccess文件看起来像这样

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|assets|static|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

#Rewrite for development
RewriteRule ^static/app/json/appData.json$ /buscador/getAppData

第一个条件是将所有请求重定向到index.php

的CI主要条件

然后我为JSON文件添加了RewriteRule,该文件将位于static/app/json/appData.json中,需要将其重定向到CI控制器buscador/getAppData

问题是这个重写规则不起作用,我不知道为什么,有人可以告诉我有什么问题吗?如何在CI中添加自定义重写规则?

谢谢!

1 个答案:

答案 0 :(得分:0)

我正在思考类似的问题已经有好几个小时了。我需要添加一个自定义的RewriteRile,以便生成(并且工作)更短的链接,以便作为SMS脚注发送给用户。我终于设法使用301重定向之前 CI重定向。这是我的.htaccess:

Options -Indexes +FollowSymLinks -MultiViews

RewriteEngine on
RewriteBase /

#Custom redirect
RewriteRule ^nv([0-9]+?)?$  /news/locate/item/$1    [NC,L,R=301]

#Remove trailing slash against SEO duplicates
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ /$1 [L,R=301]

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

现在http://domain.tld/nv1234按预期重定向到http://domain.tld/news/locate/item/1234,虽然不像我希望的那样透明,但我找不到更好的方法。 请注意自定义重定向行中的 R = 301 - 如果未将客户端重定向到newsController,则RewriteRule将不起作用。

在此发布我的解决方案,希望其他开发人员不会像我(和OP)那样迷失方向。