带参数的 htaccess RewriteRule 问题

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

我在 www/intranet/ 文件夹中有一个 .htaccess 文件:

RewriteEngine On
RewriteBase /intranet/
RewriteRule ^administration/profils/editer/(\d+)/?$ administration-profils-editer.php?id=$1 [L]
RewriteRule ^article/(\d+)/?$ article.php?id=$1 [L]

网址管理/配置文件/编辑器/1/工作正常,但网址文章/1/不起作用。显示页面article.php,但参数id不起作用。

除此之外,当我点击article.php?id=1时,它确实有效。

另外,如果我在 htaccess 中执行类似的操作

RewriteRule ^test/article/(\d+)/?$ article.php?id=$1 [L]
它有效,我将获得 id 参数。

我无法让它正常工作:(

php .htaccess mod-rewrite
1个回答
0
投票

这似乎是由于 Apache 的内容协商模块 造成的问题。该模块运行 before

mod_rewrite
模块并使 Apache 服务器匹配文件的扩展名。因此,如果
/file
是 URI,那么 Apache 将自动重写为
/file.php
(如果在路径中找到该文件)。因此,当您的重写规则运行时,它与正则表达式模式不匹配
^article/(\d+)/?$

您需要通过关闭

MultiViews
选项来关闭内容协商功能。

简而言之,将此行添加到您的 .htaccess 顶部:

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