Htaccess URLRewrite

问题描述:

我有一个关于URL重写的问题。
当我现在请这样的URL:Htaccess URLRewrite

http://domein.ext/error/mysql/2/class.core.php/

它将输出这个在德GET变量:

$_GET['type'] = mysql/2/class.core.php/.php/mysql 
$_GET['error'] = 2 
$_GET['file'] = class.core.php 

但类型不正确?这是我的.htaccess:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 

RewriteRule ^(.*)$ $1.php 

RewriteRule ^index/password/ index.php?error=password 
RewriteRule ^error/(.*)/(.*)/(.*)/ error.php?type=$1&error=$2&file=$3 

我该如何解决这个问题? 和其他一切工作正常..

+2

请注意'.'匹配'/'。 –

确保你结束所有规则与L标志。将您的代码更改为:

RewriteEngine on 

RewriteRule ^index/password/?$ index.php?error=password [L,QSA,NC] 

RewriteRule ^error/([^/]+)/([^/]+)/([^/]+)/?$ error.php?type=$1&error=$2&file=$3 [L,QSA,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L] 

请尝试将比赛非贪婪:

RewriteRule ^error/(.*?)/(.*?)/(.*)/ error.php?type=$1&error=$2&file=$3