2011-01-23 98 views
1

我已經工作了一段時間,試圖讓的.htaccess重定向和GET變量麻煩

website.com/$1/$2/$3 
website.com/$1/$2 

生產

website.com/public/index.php?module=$1&controller=$2&action=$3 
website.com/public/index.php?controller=$1&action=$2 

,但我似乎無法得到它的工作

我我試圖用兩個.htaccess文件

.htaccess文件位於根/

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
Options +Indexes 

    RewriteEngine on 
RewriteRule !^public/ public%{REQUEST_URI} [L] 

</IfModule> 
/位於根/公共

.htaccess文件

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
Options +Indexes 

    RewriteEngine on 
RewriteRule ^public/([^/]+)/([^/]+)/([^/]+)(/|)$ public/index.php?module=$1&controller=$2&action=$3 
RewriteRule ^public/([^/]+)/([^/]+)(/|)$ public/index.php?controller=$1&action=$2 

</IfModule> 

我現在有它重定向到公共/但無法找到一個方法來改變GET變量

回答

0

在根/大衆/ .htaccess,匹配和重寫pathes相對於root/public,因此它們不以公開開頭,並且您不得嘗試匹配^ public:

RewriteEngine on 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)(/|)$ index.php?module=$1&controller=$2&action=$3 
RewriteRule ^([^/]+)/([^/]+)(/|)$ index.php?controller=$1&action=$2 

末可選的斜槓可以用/?匹配:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?module=$1&controller=$2&action=$3 
0

標籤<IfModule mod_rewrite.c>只適用於Apache的配置。

在.htaccess文件,你必須先從

RewriteEngine On 
RewriteBase/

其次是你的條件。

+1

不是真的,作品在.htaccess /目錄上下文太 – arnaud576875 2011-01-23 20:41:49

1

我這個單一的.htaccess罰款解決它自己的根

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)\.html$ $1.php [L] 
RewriteRule !^public/ public%{REQUEST_URI} [L] 
RewriteRule ^(.*)/([style|css|js|javascript|images|img|fonts|swf]+)/(.*)$ public/$2/$3 [L] 

RewriteRule ^public/([^/]+)/([^/]+)/([^/]+)/?$ public/index.php?module=$1&controller=$2&action=$3 [L] 
RewriteRule ^public/([^/]+)/([^/]+)/?$ public/index.php?controller=$1&action=$2 [L] 

編輯:

我選擇我的網址起搏移動到我的PHP因爲htaccess的是這種類型的nightmere事情和if/else語句是驚人的...對於那些你有類似的問題,新的代碼是:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ public/index.php/$1 [L] 
RewriteRule ^(.*)/([style|css|js|javascript|images|img|fonts|swf]+)/(.*)$ public/$2/$3 [L] 

ErrorDocument 404 /error404 
ErrorDocument 403 /error403