3

好吧,我已经浪费了很多时间试图弄清楚这一点,但是我越是尝试学习重写规则,我似乎就越不了解发生了什么。我需要为基于 codeigniter 的项目修复一些重写规则。

该应用程序是一个多语言 CMS,它基本上适用于模块、页面和帖子,并且在.htaccess文件中我需要检查 url 是页面还是帖子并重定向到适当的控制器。

到目前为止,在我的.htaccess文件中,我有以下内容:

    #if I'm on the homepage and i have a language id
    RewriteCond $1 ^([a-z]{2})/?$
    RewriteRule ^(.*)$ index.php?homepage/index/$1 [PT,L]

    #if module - this works ok when there is no language id
    RewriteCond $1 ^(gallery|post|products)
    RewriteRule ^(.*)$ index.php?$1 [PT,L]

    # Rewrite all other URLs to index.php/URL - page controller
    RewriteRule ^(.*)$ index.php?page/show/$0 [PT,L]

使用上面的代码,如果我输入

http://mydomain.com/gallery/something/9

一切都很好,花花公子,如果我像这样添加语言ID:

http://mydomain.com/en/gallery/something/9

它不再起作用,并且我从页面控制器收到页面未找到/404 错误(在 .htaccess 末尾重定向)。

因此,假设我的 url 看起来像这样:

    http://mydomain.com/gallery/something/9       
    http://mydomain.com/en/gallery/something/25
    http://mydomain.com/fr/post/something/31

我需要以某种方式将这些网址重定向到

     http://mydomain.com/gallery/something/9        
     http://mydomain.com/en/gallery/somethingelse/25
     http://mydomain.com/fr/post/somethingelse/31

请注意,有时我有语言 ID,有时我没有。这是我应该使用 htaccess 做的事情吗?Codeigniter 路由是更好的选择吗?感谢您对堆栈溢出的任何帮助 :)

4

1 回答 1

1

试试看:

RewriteCond $1 ^[^/]*/?(gallery|post|products)
于 2012-12-24T00:36:56.630 回答