【问题标题】:passing parameters to rewrited urls将参数传递给重写的 url
【发布时间】:2012-05-06 19:02:29
【问题描述】:

我的项目有关于不同网站的数据,所以我使用 .htaccess 重写了 url,这样当有人将包含点 (.) 的名称传递给我的网站时,它会显示 site.php 页面。这是我的代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9\_\-]+(\.)[a-zA-Z0-9\_\.\-]+)/?$ site.php?url=$1
RewriteRule contact$ contact.php

这会将站点名称作为参数发送到 site.php。现在我希望再传递一个参数,就像它通常可以传递的一样,例如。我希望网站获得实时更新的数据,我想传递?update=true 以便它从互联网更新数据,而不是从数据库中获取数据。但是像这样传递参数

http://www.mysite.com/anysite.com?update=true

不工作,如何将其他参数传递给我现有的重​​写 url?

【问题讨论】:

    标签: php mod-rewrite url-rewriting


    【解决方案1】:

    [QSA] 标志(“查询字符串附加”)会将任何接收到的查询字符串附加到重写的 URL 上。我还添加了 [L] 标志作为最佳实践,以防止与您的第一个规则匹配,同时也匹配您链中稍后的附加规则,如果有的话。

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z0-9\_\-]+(\.)[a-zA-Z0-9\_\.\-]+)/?$ site.php?url=$1 [QSA,L]
    RewriteRule contact$ contact.php [QSA,L]
    

    但是,如果我误解了问题,并且您不需要浏览器发送 update=true 而是只想在所有请求上强制它,只需将其添加到重写规则:

    RewriteRule ^([a-zA-Z0-9\_\-]+(\.)[a-zA-Z0-9\_\.\-]+)/?$ site.php?update=true&url=$1 [QSA,L]
    

    【讨论】:

    • 仅供参考:QSA 代表“查询字符串附加”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多