PHP $ _GET变量在URL中重新排列,为什么?

时间:2013-02-14 19:26:42

标签: php .htaccess mod-rewrite

当我去:

https://sitedomain/product-name-p-1106.html?ref=facebook&keyw=pagetype0:friends

网址更改为:

https://sitedomain/product-name-p-1106.html?keyw=pagetype0friends&ref=facebook

基本上 $ ref $ keyw 变量反转。 为什么会发生这种情况?如何阻止它?

注意:我正在尝试使用一个脚本,它依赖于$ ref,然后是其他人写的$ keyw,我希望按顺序保留它们,不要修改那个脚本。

我认为它可能是.htaccess文件,但不确定,这是该文件:

RewriteBase / 
RewriteRule ^([a-z0-9/-]+)-p-([0-9]+).html$ product_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-c-([0-9_]+).html$ index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-m-([0-9]+).html$ index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pi-([0-9]+).html$ popup_image.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pr-([0-9]+).html$ product_reviews.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-pri-([0-9]+).html$ product_reviews_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-t-([0-9_]+).html$ articles.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-au-([0-9]+).html$ articles.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-a-([0-9]+).html$ article_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-i-([0-9]+).html$ information.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-links-([0-9_]+).html$ links.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-n-([0-9]+).html$ newsdesk_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nc-([0-9]+).html$ newsdesk_index.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nri-([0-9]+).html$ newsdesk_reviews_info.php [NC,L,QSA]
RewriteRule ^([a-z0-9/-]+)-nra-([0-9]+).html$ newsdesk_reviews_article.php [NC,L,QSA]

3 个答案:

答案 0 :(得分:2)

它们只是命名参数,不需要任何特定的顺序。如果您依赖于任何特定的排序,那么您在代码中做了一些根本性的错误。

答案 1 :(得分:0)

我收到的消息是:

不要制作或使用取决于URL参数顺序的代码

答案 2 :(得分:0)

$ _ GET vars不应该依赖于订单,除非你是在预告$ _GET并公然忽略索引。此外,MOD_REWRITE不会在浏览器端重新排序URI中的内容,只会更改服务器端的顺序/分配。

正如其他人所说,如果订单很重要,那么就会出现问题,在这种情况下,我会将值作为分隔字符串传递而不是单独的$ _GET值。

我知道你“不想”重写这个剧本,但正如其他人所说的那样,想一想它可能做错了什么?此外,你真的想要这样的失败点吗?