.htaccess重写在两个参数时有效,但不能读取后面有斜杠的第一个参数


.htaccess rewrite works when two params, but cant read first one with slash after

我知道这类问题被问了很多,但我一直没能找到解决方案。

我的.htaccess代码重写它,使第一个参数是页面,然后最多3个参数是param1、param2和param3。这很好,例如当url为"localhost/portal/dashboard"时。但是当url是"localhost/portal/dashboard/"(额外的斜杠)时,它不起作用,并给出404错误。

这是我的.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?page=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&param1=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&param1=$2&param2=$3 [L]

提前谢谢。

未测试,但在重写匹配器的末尾添加一个可选的斜杠可能会起作用,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?page=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&param1=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&param1=$2&param2=$3 [L]