RewriteRule和GET

时间:2015-11-10 15:50:18

标签: php regex .htaccess mod-rewrite

我尝试重定向:
来自:www.myDomain.com/ca/blog/first-post
to:www.myDomain / ca /​​ blog / post.php?url = first-post

我在.htaccess中写道:

RewriteRule ^ca\/blog\/(.*)\/?$  ca/blog/post.php?url=$1 [L]

在post.php中我有这个:

$url = $_GET['url'];
echo $url;

它似乎转到正确的文件:post.php,但回显给出: post.php它应该给出第一篇文章(或博客后的任何内容)

我在这里测试了正则表达式模式:http://regexr.com/3c5ud并且没关系

我在这里测试了htaccess:http://htaccess.madewithlove.be

但是当我放入服务器时仍然提供post.php。请有人解释一下。

在.htaccess中我有其他规则:

# Get rid of .php :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

# Page of errors:
ErrorDocument 404 /errors/noTrobat.html

# From no www to yes www :
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

问题是您当前的规则也匹配post.php。所以,你明白了:

www.myDomain.com/ca/blog/first-post
  ->  www.myDomain/ca/blog/post.php?url=first-post
     ->  www.myDomain/ca/blog/post.php?url=post.php

在当前规则之前添加规则,以防止重写post.php本身:

RewriteRule ^ca\/blog\/post\.php - [L]
RewriteRule ^ca\/blog\/(.*)\/?$  ca/blog/post.php?url=$1 [L]