将参数传递给重写的网址

时间:2012-05-06 19:02:30

标签: php mod-rewrite url-rewriting

我的项目有关于不同网站的数据,所以我使用.htaccess重写了网址,以便当有人将包含点(。)的名称传递到我的网站时,它会显示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

无法正常工作,如何将其他参数传递给现有的重写网址?

1 个答案:

答案 0 :(得分:2)

[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]