2014-01-24 28 views
2

当我第一次开始了我的网站,网址是按以下格式:CodeIgniter的查询字符串重写在.htaccess

project.php?projectID=1&pageID=2 

几年前我修改的.htaccess重写这些使用段,像这样:

project/1/2 

我更新了所有内部链接以使用分段格式,但这很好,因为它仍支持旧格式的任何外部传入链接。

现在我切换到CodeIgniter,使用分段格式渲染我的页面很容易,但我正在努力解决如何支持旧的查询字符串URL。

我试图在CodeIgniter中原生支持查询字符串似乎破坏了分段的URL,所以它看起来像我不能同时支持。在CodeIgniter中设置一个路径将查询字符串重定向到控制器似乎不起作用。例如:

$route['project.php?projectID=(:any)&pageID=(:any)'] = 'home/projectview/$1/$2'; 

我的第二个想法是直接修改的.htaccess到查询字符串重定向到控制器,就像这样:

(请注意,我还使用的.htaccess重写,消除外观index.php中的CI URL)

RewriteRule ^project.php?projectID=(\d*)&pageID=(\d*) project/$1/$2/ [L] 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 

但是,这个重写规则似乎也不起作用。它重定向到我的CodeIgniter 404而不被重写,甚至通过删除默认的index.php规则它不重定向,所以我假设我的正则表达式/ .htaccess格式中有一些东西是不正确的。

回答

3

您需要匹配请求而不是URI。该URI将不会有任何查询字符串:

RewriteCond %{THE_REQUEST} \ /+project\.php\?projectID=([0-9]+)(?:&pageID=([0-9]+)|) 
RewriteRule^/project/%1/%2? [L,R=301] 

RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

这很好,谢谢,但我可以要求一个修订?我也适应'&pageID ='缺席(默认为第1页)。如何使这部分正则表达式可选? – monkeymatrix

+1

@monkeymatrix查看编辑 –

+0

令人惊叹的,谢谢你的接受! :) – monkeymatrix