我在 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 参数。
我无法让它正常工作:(
这似乎是由于 Apache 的内容协商模块 造成的问题。该模块运行 before
mod_rewrite
模块并使 Apache 服务器匹配文件的扩展名。因此,如果 /file
是 URI,那么 Apache 将自动重写为 /file.php
(如果在路径中找到该文件)。因此,当您的重写规则运行时,它与正则表达式模式不匹配^article/(\d+)/?$
。
您需要通过关闭
MultiViews
选项来关闭内容协商功能。
简而言之,将此行添加到您的 .htaccess 顶部:
Options -MultiViews