.htaccess URL的一部分是用户友好的,另一部分是查询

.htaccess URL的一部分是用户友好的,另一部分是查询,.htaccess,url-rewriting,.htaccess,Url Rewriting,我的文件夹结构如下: - templates - search.php - page.php - index.php - index.php 这不是完整的结构,但对于这个问题已经足够了Index.php根据名为page的第一个查询,让任务包含文件。然后,通过模板类,我得到了正确的模板.htaccess如下所示: Options +FollowSymLinks RewriteEngine On RewriteRule ^([a-zA-Z0-9\-]+)$ index.p

我的文件夹结构如下:

- templates
    - search.php
    - page.php
    - index.php
- index.php
这不是完整的结构,但对于这个问题已经足够了
Index.php
根据名为
page
的第一个查询,让任务包含文件。然后,通过模板类,我得到了正确的模板<此零件的code>.htaccess如下所示:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?page=$1
现在是我无法解决的部分。我有另一个查询,带有搜索字符串

index.php?page=search&q=some+query
是一个不友好的URL示例。现在,我想让这个URL看起来像
http://www.domain.com/search?q=some+查询

我尝试了
RewriteRule^([a-zA-Z0-9\-]+)?q=([a-zA-Z0-9\+\%])$index.php?page=$1&q=$2
,但我在…中得到了一个
未定义的索引:q


问题是,如何使第一个查询像静态页面一样,第二个查询像该页面中的查询字符串一样?

在第一条规则中,您只需要一个
QSA
标志:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?page=$1 [L,QSA]
  • QSA
    (查询字符串附加)标志在添加新查询参数时保留现有查询参数
  • 您无法匹配
    RewriteRule
    指令中的查询字符串

这就行了,非常感谢。在第一条规则的末尾追加
[L,QSA]
有效。