【问题标题】:How do you make .htaccess pass all GET parameters without knowing what they are named?如何让 .htaccess 传递所有 GET 参数而不知道它们的名称?
【发布时间】:2011-07-01 14:49:36
【问题描述】:

我正在开发一个涉及自定义用户页面的 CMS。我有一个设置了三个级别的层次结构,它工作得很好。它有一个 .htaccess 也可以使 URL 更友好:

RewriteRule ^([A-Za-z0-9]+).html /content.php?page=$1 [L]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+).html /content.php?page=$2 [L]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).html /content.php?page=$3 [L]

该代码运行良好。

我的另一个功能是添加自定义 php 页面,以防我需要添加更强大的功能(例如制作一个从数据库获取电子邮件地址的联系表单)。

所以我的问题是如何修改(或添加到).htaccess 以使所有 GET 参数传递到 PHP 页面。例如,使用联系页面示例,如果用户转到http://www.mysite.com/contact.html?name=someuser,我希望 .htaccess 将其重写为 content.php?page=contact&name=someuser,但没有明确告诉它查找“名称”为参数名称。我还希望它可以使用尽可能多的参数。

我知道这是一个很大的(希望不会造成混淆)请求,但有可能吗?或者至少是其中的一部分?谢谢!

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    将 QSA 添加到您的参数中。所以对于你的第一条规则,它会变成

    RewriteRule ^([A-Za-z0-9]+).html /content.php?page=$1 [L, QSA]
    

    【讨论】:

    • 我在解决我遇到的问题时找到了这个答案。我找不到参考,但QSA 标记必须继续L 标记,否则您将收到内部服务器错误。 RewriteRule ^([A-Za-z0-9]+).html /content.php?page=$1 [QSA,L] 至少在我的环境中这是我必须改变的。
    【解决方案2】:

    您需要使用 QSA(查询字符串附加)标志。 mod_rewrite documentation 有更多细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多