Htaccess正则表达式不匹配

时间:2015-10-05 18:25:52

标签: regex .htaccess

我迫切需要快速提示。

尝试使用htaccess来改变这个不那么可爱的网址

http://localhost/test/index.php?page=Article&articleID=61

http://localhost/test/article/2015-09-21-this-is-the-headline

从我收集的内容中,我需要将最后一部分发送到php脚本,然后可以从数据库中获取匹配的id。知道我应该能够将用户发送到原始网址。

RewriteRule ^(.*)\/article\/(.*)$ redirect/article.php [L]
# RewriteRule ^(.*)$ index.php

截至目前,我还没有将信息传递给脚本。 redirect / article.php 只包含一个print语句,一旦我走到那一步就让我知道。

然而,尽管我的大脑和每个正则表达式调试器都说不然,但它与第二个代码框中提供的url不匹配。我得到的只是好老404.如果我激活第二条规则它会应用到我的网址,告诉我第一条规则只是被跳过。

我错过了什么?

htaccess的:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # rename individual pages
    RewriteRule ^(.*)\/article\/(.*)$ redirect/article.php [L]
    # RewriteRule ^(.*)$ index.php

    # resize images    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.)*\/([0-9]+)\-(([0-9]|[a-z])+)\.(prev)$ filePreview.php?id=$2&size=$3 [L]

    php_value upload_max_filesize 20M
    php_value post_max_size 21M
</IfModule>

1 个答案:

答案 0 :(得分:1)

.htaccess文件的位置通知您必须如何列出mod_rewrite的路径。在.htaccess内部,RewriteRule的路径未收到前导/。由于您的/test居住在(.*),因此规则开头的/并未与任何内容匹配且无害。由于之后是article//路径预计将永远不会收到article。最简单的解决方法是通过以下方式更改此规则以匹配RewriteRule ^article/(.*) redirect/article.php [L]

$1

假设您将其用作PHP脚本中的查找,请添加一个参数以使用RewriteRule ^article/(.*) redirect/article.php?article=$1 [L] 捕获的模式,如:

RANK