.htaccess传递参数并删除页面名称

问题描述

我的网站中具有以下文件夹结构:

     example.com/
                reports/
                        causelist/
                                 final_causelist.PHP

我有一个指向final_causelist.PHP页面链接/ URL,如下所示:

http://example.com/reports/causelist/final_causelist.PHP?wb_sno=23&dated=2020-10-26&j_names=Mr.+ABC

我要访问如下页面

http://example.com/23/2020-10-26/Mr.+ABC

对于上述情况,我在 causelist 文件夹中使用以下代码创建了 .htaccess :>

RewriteEngine on  
RewriteBase /reports/causelist/
Options -Indexes

RewriteRule ^(\d+)/([a-z-]+)/(.+)/$ /final_causelist.PHP?wb_sno=$1&dated=$2&j_names=$3 [L,B]

但是它没有显示页面,并且抱怨在此服务器上找不到请求的页面吗?

解决方法

您的正则表达式与date部分不正确匹配,并且在使用/时必须从目标中删除前导RewriteBase

Options -Indexes
RewriteEngine on
RewriteBase /reports/causelist/

RewriteRule ^(\d+)/([\d-]+)/(.+?)/?$ final_causelist.php?wb_sno=$1&dated=$2&j_names=$3 [L,QSA]
,

请您尝试以下。

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(\d+)/(\d{4}-\d{2}-\d{2})/(.+?)/?$
RewriteRule ^.*$ /reports/causelist/final_causelist.php?wb_sno=%1&dated=%2&j_names=%3 [QSA,NE,NC,L]