【问题标题】:htaccess always uses the root folder rulehtaccess 始终使用根文件夹规则
【发布时间】:2015-10-16 22:21:25
【问题描述】:

我正在尝试为我的 php 搜索页面创建一些不错的 url。

我当前的代码:

RewriteRule    ^/search-jobs/?$    search-jobs.php    [NC,L]    # Search jobs page
RewriteRule    ^/search-jobs/jobs-in-(.*)/?$    search-results.php?location=$1    [NC,L]    # Search results locations page

将 /search-jobs 与 search-jobs.php 匹配,很好 但它也将 /search-jobs/jobs-in-london 匹配到 search-jobs.php,但我希望它匹配 search-results.php 的第二条规则

为什么总是使用第一条规则?以及如何解决?

编辑:

目前的答案都没有奏效。我认为我的问题是我的主机上的某个地方(我无法访问)设置了一些默认值,就好像我只是去 /search-results 一样,它会自动使用 search-results.php 文件,尽管我没有设置任何说明这样做?

因此,理论上,任何 /search-jobs(.*) 查询都会自动使用 search-jobs.php,似乎与我创建的任何规则无关。

不管怎样,我把我的规则重新安排到了下面……我仍然总是点击 search-jobs.php 文件:

RewriteEngine On    # Turn on the rewriting engine

RewriteRule    ^/search-jobs/jobs-in-(.*)/?$    search-results.php?location=$1    [NC,L]    # Search results locations page
RewriteRule    ^/search-jobs/(.*)-jobs/?$    search-results.php?keywords=$1    [NC,L]    # Search results keywords page
RewriteRule    ^/search-jobs/?$    search-jobs.php    [NC,L]    # Search jobs page

【问题讨论】:

  • RewriteRule 模式中仍然有一个前导斜杠。

标签: php .htaccess


【解决方案1】:

从请求字符串的开头删除斜杠/,如下所示:

RewriteRule    ^search-jobs/jobs-in-(.*)/?$    search-results.php?location=$1    [NC,L]    # Search results locations page
RewriteRule    ^search-jobs/(.*)-jobs/?$    search-results.php?keywords=$1    [NC,L]    # Search results keywords page
RewriteRule    ^search-jobs/?$    search-jobs.php    [NC,L]    # Search jobs page

【讨论】:

    【解决方案2】:

    将您的第二条规则放在首位,并将您的正则表达式括在引号中。

    这样,当它匹配 ^/search-jobs/jobs-in(.*)/?$ 时,[L] 标志表示不要继续,因此它不会处理 ^/search-jobs/?$

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      相关资源
      最近更新 更多