【问题标题】:CodeIgniter Query String Rewrite in .htaccess.htaccess 中的 CodeIgniter 查询字符串重写
【发布时间】:2014-01-24 22:58:18
【问题描述】:

当我第一次启动我的网站时,网址采用以下格式:

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 重写来消除 CI URL 中 index.php 的出现)

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

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

【问题讨论】:

    标签: regex .htaccess codeigniter mod-rewrite query-string


    【解决方案1】:

    您需要匹配请求而不是 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]
    

    【讨论】:

    • 这很好用,谢谢,但我可以要求修改一下吗?我还适应了 '&pageID=' 的缺失(默认为第 1 页)。如何使这部分正则表达式可选?
    • 嗨@JonLin ..我有一个类似的问题你能帮我解决这个问题吗..https://www.jesvenues.com/home/search/?location=Hyderabad&occasion=Anniversary&gathering=100&date=29-Sep-my URL is 2017&timing=Lunch 我已经尝试过你的解决方案来得到它作为https://www.jesvenues.com/search/Hyderabad/Anniversary/100/29-Sep-2017/Lunch.. 但它不工作...你能帮我解决这个问题吗..
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2023-03-04
    相关资源
    最近更新 更多