.htaccess URL的一部分是用户友好的其他是查询

时间:2014-12-21 13:46:20

标签: .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.php?page=$1

现在出现了我无法解决的问题。我有另一个查询,搜索字符串。

index.php?page=search&q=some+query是非友好网址的示例。现在,我想让此网址看起来像http://www.domain.com/search?q=some+query

我尝试使用RewriteRule ^([a-zA-Z0-9\-]+)?q=([a-zA-Z0-9\+\%]+)$ index.php?page=$1&q=$2,但我得到Undefined index: q in ...

问题是,我怎样才能使第一个查询像静态页面一样行动,第二个行为就像从该页面查询字符串一样?

1 个答案:

答案 0 :(得分:1)

您的第一条规则中只需要一个QSA标记:

Options +FollowSymLinks

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