【问题标题】:mod_rewrite not mapping url properlymod_rewrite 没有正确映射 url
【发布时间】:2014-09-25 18:28:14
【问题描述】:

我正在使用 mod_rewrite 来整理我的网址

有一条规则可以转化为以下内容:

RewriteEngine On
RewriteRule ^search/([^/]*)/([^/]*)$            /search?type=$1&query=$2 [L]

/search?type=title&query=me
/search/title/me

但是这不起作用,当我转到上面的 url /search/title/me 时,我无法获取参数 typequery

如果我将重写规则更改为

RewriteRule ^search2/([^/]*)/([^/]*)$           /search?type=$1&query=$2 [L]

它工作正常,我可以得到所有的参数。 我不明白这是怎么回事。

请帮帮我!!

【问题讨论】:

    标签: php regex apache mod-rewrite


    【解决方案1】:

    这是由于MultiViews 选项。选项MultiViewsApache's content negotiation module 使用,该选项在mod_rewrite 之前运行,并使Apache 服务器匹配文件的扩展名。所以/file 可以在 URL 中,但它会服务于/file.php

    在 .htaccess 开头使用此行禁用它:

    Options -MultiViews
    

    【讨论】:

    • 我在 .htaccess 文件的开头添加了这个,现在我得到一个找不到页面的错误
    • 这是唯一的规则RewriteRule ^search/([^/]*)/([^/]*)$ /search?type=$1&query=$2 [L]/search/ 是目录吗?
    • 这是唯一的规则,我在 .htaccess 文件中只有 3 行,并且没有名为 search 的文件夹
    • 好的,那么/search 是什么?它是一个PHP文件吗? domain.com/search?type=title&query=me 在浏览器中为您工作吗?
    • 是的,它是一个 php 文件,按照您提到的方式工作正常,我尝试将其添加到规则中以防万一,没有区别。
    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 2018-05-09
    • 2013-05-25
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多