htaccess重写程序的多个参数

问题描述 投票:0回答:1

我有一个看起来像的URL:

https://www.example.com/project/api/read.php?uid=1234567&dvc=ABCDE

我想建立一个重写规则,将URL输入:

https://www.example.com/project/api/read/1234567/ABCDE

我的尝试看起来像这样:

RewriteEngine On    # Turn on the rewriting engine
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=$1&dvc=$2 [NC,L,QSA]
.htaccess url url-rewriting rules
1个回答
0
投票
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=$1&dvc=$2 [NC,L,QSA]

RewriteRule pattern中的路径段之间缺少斜线。

假设您的.htaccess文件位于/project/api子目录中(如您的指令所隐含,然后尝试以下操作:

# MultiViews must be disabled for the rewrite to work
Options -MultiViews

# Turn on the rewriting engine
RewriteEngine On

RewriteRule ^read/([\w-]+)/([\w-]*)$ read.php?uid=$1&dvc=$2 [L,QSA]

[\w是与[0-9a-zA-Z_]相同的速记字符类,在其中添加了连字符(-)。

由于URL /read直接映射到文件/read.php,因此必须禁用MultiViews,否则mod_negotiation在没有任何URL参数的情况下将请求“重写”到/read.php(在mod_rewrite之前)。

请注意,我在第一个路径段中将量词从*更改为+,因为在您的URL中这似乎是必需的?

您的示例URL(/read/1234567/ABCDE)在第一个路径段中显示数字,在第二个路径段中显示字母。如果这是对URL类型的准确反映,则应使regex更具限制性,以便仅检查此数据类型。

Aside:

RewriteEngine On    # Turn on the rewriting engine

请注意,Apache不支持行尾注释。在这种情况下,这可能是“确定”,因为仅忽略了RewriteEngine On之后的文本。在其他情况下,您可能会收到500个内部服务器错误。

© www.soinside.com 2019 - 2024. All rights reserved.