2011-01-23 100 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