2013-09-21 63 views
0

我目前正在開發Web應用程序,並在確定路由請求的htaccess規則時卡住了。用於Web應用程序的3部分路由

我想是這樣的(M =模塊,=動作,O =動作的對象):

www.domain.com/m/a/o 

對於一般請求我打算有此(o是空的):

www.domain.com/users/login 
to: www.domain.com/index.php?m=users&a=login 
www.domain.com/users/logout 
to: www.domain.com/index.php?m=users&a=logout 

但對於站點範圍內的路由我想:

www.domain.com/projects/show/123 
to: www.domain.com/index.php?m=projects&action=show&object=123 

一般來說,有我想要爲哪一個規則本身我的.htaccess重定向如下:

www.domain.com/EMPTY 
    to: www.domain.com?index.php 
www.domain.com/([^-]a-z0-9) 
    to: www.domain.com?index.php?m=$1 
www.domain.com/([^-]a-z0-9)/([^-]a-z0-9) 
    to: www.domain.com?index.php?m=$1&a=$2 
www.domain.com/([^-]a-z0-9)/([^-]a-z0-9)/([^-]a-z0-9) 
    to: www.domain.com?index.php?m=$1&a=$2&o=$3 

你能幫忙嗎?

我已經試過這樣的事情,但沒有任何東西比域本身長:

RewriteRule ^/([^-]a-z0-9+)$ index.php?m=$1 [L] 
RewriteRule ^/([^-]a-z0-9+)/([^-]a-z0-9+)$ index.php?m=$1&a=$2 [L] 
RewriteRule ^/([^-]a-z0-9+)/([^-]a-z0-9+)/([^-]a-z0-9+)$ index.php?m=$1&a=$2&o=$3 [L] 
+1

你正在做這個可怕的錯誤。如果你希望你的mod_rewrite是靈活的,你需要實現一個前端控制器,然後爲所有請求添加簡單規則,比如'RewriteRule ^(。*)$ index.php/$ 1 [QSA,L]'。 < - Zend2和Symfony2是如何做到這一點的 – Yang

+0

您的意思是爆炸REQUEST_URI嗎? – jakubplus

+1

1)你需要一個路由器(它決定了請求URI是否匹配)2)分派器(根據路由匹配建立實例)。不,爆炸在這裏效率不高,因爲URI也可能包含變量。說它可能是'/ article /(:id)'。唯一有效的方法是正則表達式,而不是'explode()' – Yang

回答

-1

夫婦在你的代碼錯誤:

  1. 你所有的正則表達式是不正確的
  2. 引導斜槓不匹配RewriteRule in .htaccess

用一個非常簡單的正則表達式來更改你的代碼,如下所示:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^([\w-]+)/?$ /index.php?m=$1 [L,QSA] 
RewriteRule ^([\w-]+)/([\w-]+)/?$ /index.php?m=$1&a=$2 [L,QSA] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ /index.php?m=$1&a=$2&o=$3 [L,QSA] 
+0

@Downvoter:我可以知道這次投票的原因嗎? – anubhava