.htaccess重定向并获取变量麻烦

时间:2011-01-23 20:32:59

标签: php apache .htaccess mod-rewrite url-rewriting

我已经工作了一段时间试图获得

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文件位于root /

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

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

 </IfModule>

.htaccess文件位于root / public /

<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>

我目前已将其重定向到公共/但无法找到更改获取变量的方法

3 个答案:

答案 0 :(得分: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是一种用于此类事情的睡眠,并且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 

答案 1 :(得分:0)

在root / public / .htaccess中,匹配和重写的pathes是相对于root / public的,所以它们不是以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

答案 2 :(得分:0)

标记<IfModule mod_rewrite.c>仅适用于apache配置。

在.htaccess文件中,您必须以

开头
RewriteEngine On
RewriteBase /

然后是你的条件。