Php 重写规则并获取

Php 重写规则并获取,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,我尝试重定向: 发件人:www.myDomain.com/ca/blog/first post 致: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,但ech

我尝试重定向:
发件人:www.myDomain.com/ca/blog/first post
致: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,但echo给出了: php,它应该会给出第一篇文章(或者在blog/之后的任何内容)

我已经在这里测试了regex模式:它还可以

我还在这里测试了htaccess:

但是当我把它放在服务器上时,仍然会给出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>
#摆脱.php:
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}\.php-f
重写规则^(.*)$$1.php
#错误页:
ErrorDocument 404/errors/noTrobat.html
#从否www到是www:
重新启动发动机
重写基/
重写cond%{HTTP_HOST}^www\。
重写规则^(.*)$http://www.%{HTTP_HOST}/$1[R=301,L]

问题是您当前的规则也与
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]

页面是
post.php
,或者回音是
post.php
?问题是模式也与post.php本身匹配,并且很容易更正。但是我怀疑您在.htaccess中有更多的重写规则,因为这通常会导致重写循环和500错误。请在.htaccess文件中发布任何其他内容,以便我们推荐正确的解决方案。@chris85我希望重写规则将我带到www.myDomain/ca/blog/post.php?url=first post或blog/Please show full.htacces文件后的内容,这样我们就可以看到相关重写规则相对于您显示的其他规则的位置。我可以工作。非常感谢。你在[L]前面加了一个破折号,意思是“与此不符”你能解释一下吗?@Nrc很高兴这有帮助!请记住接受答案。:)在
[L]
前面的
-
只是表示“不要改变它,别管它。”