【发布时间】:2017-04-25 23:14:25
【问题描述】:
情况: 我有一个带有老式 URL 的基于文件目录的网站,我正在尝试将其转换为不需要这么多文件和目录的系统。
所以,这样的网址: www.mysite.org/members/support/newmember/
当前返回以下文件: www.mysite.org/members/support/newmember/index.php
这可行,但需要太多的目录和索引文件。
在为工作太多的朋友开发另一个站点时,我从他那里得到了一个脚本,该脚本使用 mod_rewrite 将老式 URL 解析为 $_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/newmember
我的根目录中的索引文件有以下可用的变量: $_GET['文件夹'] $_GET['页面'] $_GET['子页面']
并且索引文件中的脚本只是根据 $_GET 变量组装正确的包含,因此无需如此广泛的文件结构。
问题: 查询字符串不再可用于 PHP 脚本。 Mod_rewrite 吞噬了它们,只吐出 .htaccess 规则中定义的 GET 变量。这对于所有内部站点链接都可以,因为我可以放弃查询字符串并使用我的 URL 变量或 SESSION 变量使值可用于我的页面。但剩下的棘手问题是我的网站将人们发送到 PayPal,而我的脚本依赖于 ? PayPal 发送回我的网站的查询字符串。 PayPal 将用户退回给用户:
www.mysite.org/support/members/newmemberconfirmation?id=1234567
并且 ?id 值,即使它出现在浏览器的 URL 窗格中,也不能用于脚本。
所需的解决方案: 我不知道如何为 mod-rewrite 编写脚本;我什至不能非常自信地制作正则表达式。我需要的是一个脚本,它将 URL 中的斜杠之间的值分配给 GET 变量,但也会使原始 GET 变量可用于我的 PHP 脚本。有人有我的sn-p可以做到吗?
【问题讨论】:
-
您应该开始阅读文档和一些基本的“入门”教程。所有这些都在各处进行了解释。该文档实际上还提供了您要求的那些“sn-ps”......
-
已经有几十个,如果不是几百个问题在处理这个问题。您正在以艰难的方式进行操作,而这首先导致了您的问题。当另一个问题的解决方案是平均的时,我不愿意将一个问题标记为重复。 Send everything to
index.phpin one rule 你会看到$_SERVER['REQUEST_URI']包含你需要的东西。
标签: php .htaccess mod-rewrite