我的项目有关于不同网站的数据,所以我使用.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
无法正常工作,如何将其他参数传递给现有的重写网址?
答案 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]