漂亮的 URL 有时会用“?”重写。有时没有

Posted

技术标签:

【中文标题】漂亮的 URL 有时会用“?”重写。有时没有【英文标题】:Pretty URLs rewrite sometimes with "?" sometimes without 【发布时间】:2011-08-05 21:53:34 【问题描述】:

我希望有人能回答“为什么”会这样:

有时我可以使用:

...
RewriteRule ^(.*)$ index.php/$1 [L]

然后有时上述方法不起作用,我必须使用:

...
RewriteRule ^(.*)$ index.php?/$1 [L]

主要区别在于添加了? ...我通常会在不同的系统设置上看到这种情况,fastcgi vs module vs cgi,但还没有做足够的设置来查看模式。

我猜这与 apache/setup 如何解析 path/path_info 数据有关。欢迎任何想法,理想情况下,我想对为什么会发生这种情况以及何时发生有一个可靠的解释。

在同一个线程上...有时 Apache 不输出 PATH_INFO 环境变量,这可能是造成这种情况的根本原因,但我想知道为什么会这样。

【问题讨论】:

可能由AcceptPathInfo apache 配置选项管理。 我玩过AcceptPathInfo,但它似乎没有任何影响,至少看起来是这样。 您在谈论 wordpress 或 codeigniter 还是两者兼而有之?因为,它们都实现了自己的路由规则。 codeigniter 主要是,我不确定我是否在 WordPress 中遇到过这种情况(我认为 WP 的路由比 CI 更好,他们保持简单并且更多地依赖 PHP) 你试过qsappend|QSA吗? 【参考方案1】:

?是查询字符串开始的标记。

所以基本上你的第一条规则将 URL "x" 重写为 index.php 目录中的文件 "x",第二条规则将 URL "x" 重写为带有参数 "x"index.php 文件。 [(顺便说一句,我不知道如何检索文件中没有名称的变量,通常您使用?var=value&var2=value2等...)

【讨论】:

以上是关于漂亮的 URL 有时会用“?”重写。有时没有的主要内容,如果未能解决你的问题,请参考以下文章

重写“漂亮的 URL”时如何处理变音符号(口音)

.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?

Yii2 / PHP / IIS7 - URL重写和文件权限(漂亮的URL问题)

使用多个查询字符串重写 IIS URL

nginx二级目录index.php重写(php)

HTTP 错误 500.52 - Docker 上的 URL 重写模块错误