仅使用非常特定的模式将URL与mod_rewrite匹配

时间:2011-05-19 14:40:58

标签: .htaccess codeigniter mod-rewrite expressionengine

我有一个小问题需要解决。我有两个并行运行的应用程序(CodeIgniter和ExpressionEngine),我需要将特定的URL模式路由到CI以及其他所有的EE模式。到目前为止,这主要是工作,但有一个小细节。这是我目前的代码:

# Rewrite requests for anything that's not a CI controller or physical file/folder to ExpressionEngine
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !(admin|cron|fst_reporting|playcatch|ppv|purchase|reporting|xml) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

# Route everything else to CodeIgniter
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/index.php/$1 [L]

但是我也想推送任何请求:

/training
/training/
/training/programme/something
/training/programme/something/

到第一个条件块中的EE,然后强制请求一个特定的URL模式

/training/something

到CI应用程序(如第二个条件块中所示)。

我遇到的问题是尝试将上述要求混合到我现有的条件语句中,理想情况下我想说“任何不等于我的代码点火器控制器OR等于/ training或/ training / program / something” 。与此同时,我仍然需要能够将对/ training / something(其中某些内容是随机字符串)的请求路由到CI应用程序。

有什么想法吗? :)

1 个答案:

答案 0 :(得分:2)

也许是这样的:

RewriteBase /
RewriteCond %{REQUEST_URI} ^/training(/)?(/programme/something)?(/)? [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !(admin|cron|fst_reporting|playcatch|ppv|purchase|reporting|xml) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
希望有所帮助。