漂亮的 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 有时会用“?”重写。有时没有的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?