当我在url中获取GET的值时,重写规则不起作用

时间:2018-09-30 12:37:34

标签: php .htaccess url-rewriting

.htaccess文件

RewriteEngine on 

#FIRST RULE
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

#2ND RULE    
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1 [L]

#3RD RULE
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./edit-page?edit=$1 

现在让我解释一下上面的代码。

FIRST重写规则将删除所有.php扩展名,因此,如果我有http://localhost:8888/index.php,则可以使用http://localhost:8888/index来访问它,而没有.php扩展名

SECOND重写规则将转换此链接:

http://localhost:8888/CodeArk/?page=introduction-page

进入

http://localhost:8888/CodeArk/introduction-page

问题是最后一条规则(第3条规则)。

它应该转换此链接:

http://localhost:8888/CodeArk/edit-page/?edit=introduction-page

进入

http://localhost:8888/CodeArk/edit-page/introduction-page

现在这行不通,因为当我尝试在edit-page.php文件中获取edit的值时

edit-page.php

echo "YOUR EDIT IS: "$_GET['edit'];

输出为

YOUR EDIT IS: edit-page/introduction-page.php/introduction-page

发生了什么事?输出应该只有这个

YOUR EDIT IS: introduction-page

我怀疑我的重写规则是原因,但我不知道原因。请帮助

1 个答案:

答案 0 :(得分:0)

最后解决了。

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*?)/?$ $1.php [L]

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1 [L]