情境:我有一个基于文件目录的网站,它带有老式的URL,我正试图将它转换成一个不需要太多文件和目录的系统。
因此,这样的一个URL是:www.mysite.org/members/support/new员/
当前返回以下文件: www.mysite.org/members/support/newmember/index.php
这是可行的,但需要太多的目录和索引文件。
在为一个工作太多的朋友开发另一个站点时,我从他那里得到了一个脚本,它使用mod_rewrite将一个老式的_GET[]解析成$_GET[]变量。使用此.htaccess脚本:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?folder=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?folder=$1&page=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ index.php?folder=$1&page=$2&subPage=$3 [L]
还有一个老式的URL,如:www.mysite.org/members/support/new员
根目录中的索引文件有以下vars可用:$_GET‘文件夹’$_GET‘’page‘$_GET’‘subPage’
索引文件中的脚本根据$_GET变量简单地组装正确的包含,从而消除了对这样一个广泛的文件结构的需求。
问题: PHP脚本不再可以使用查询字符串。Mod_rewrite吞食了它们,只吐出了在.htaccess中的规则中定义的GET vars。对于所有内部站点链接来说,这都是可以的,因为我可以放弃查询字符串,使用我的URL vars或会话vars来使我的页面可用的值。但遗留下来的棘手问题是,我的站点将人发送到PayPal,而我的脚本依赖于?PayPal发送回我的站点的查询字符串。PayPal将用户发回如下内容:
www.mysite.org/support/members/newmemberconfirmation?id=1234567
并且,即使它出现在浏览器的URL窗格中,该id值对脚本也不可用。
想要的解决方案:我不知道如何为mod重写编写脚本;我甚至不能非常自信地做一个正则表达式。我需要的是一个脚本,在URL中的斜杠之间分配值以获得vars,但也会使我的PHP脚本可以使用原始的GET vars。有谁能帮我做这件事?
发布于 2016-12-10 10:02:44
更改3标志[L]
并使用[L,QSA]
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?folder=$1 [L,QSA]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?folder=$1&page=$2 [L,QSA]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ index.php?folder=$1&page=$2&subPage=$3 [L,QSA]
QSA_qsappend 当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用QSA标志会使查询字符串组合起来。
https://stackoverflow.com/questions/41077972
复制相似问题