PHP URL重写-无法获取查询字符串参数
我在一个网站上工作,同时学习PHP,所以这对我来说是比较新的。我目前正在进行URL重写,但是,我没有得到预期的结果 我正在尝试将:PHP URL重写-无法获取查询字符串参数,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,我在一个网站上工作,同时学习PHP,所以这对我来说是比较新的。我目前正在进行URL重写,但是,我没有得到预期的结果 我正在尝试将:example.com/CMS/listing?id=1更改为example.com/CMS/listing/1 使用保存在文件根目录中的.htaccess文件,我有以下内容: RewriteEngine On RewriteBase / RewriteRule CMS/listing/([0-9]+) CMS/listing.php?id=$1 在这个站点上,我有
example.com/CMS/listing?id=1
更改为example.com/CMS/listing/1
使用保存在文件根目录中的.htaccess
文件,我有以下内容:
RewriteEngine On
RewriteBase /
RewriteRule CMS/listing/([0-9]+) CMS/listing.php?id=$1
在这个站点上,我有一个简单的echo函数,可以获取id
的查询字符串param。当我导航到example.com/CMS/listing?id=1
时,函数会显示1
,但是,当我转到example.com/CMS/listing/1
时,它不会显示任何内容。我有什么遗漏或做错了吗
# Get QString Param
$id = $_GET["id"];
echo $id;
脚注
.htaccess
保存在根目录下,而清单.php
位于名为CMS
的文件夹中。看起来您与多视图
有冲突。您应该禁用文件顶部的多视图
。htaccess
文件:
Options -MultiViews
如果启用了MultiViews
,那么当您请求/CMS/listing/1
时,mod_协商将在mod_rewrite指令能够处理请求之前将请求映射到/CMS/listing.php
(附加文件扩展名,不带任何URL参数)。(/1
被视为URL上的附加路径名信息或路径信息。)
类似于
/CMS/listing?id=1
(不带文件扩展名)的URL只有在启用了MultiViews
的情况下才能工作。在这种情况下,URL上已经存在查询字符串。您还可以将所有流量重定向到index.php,并在php中处理所有流量。其他CMS和框架通常就是这样做的
这是Laravel方法-您不必这样做,但稍后当您想在新闻帖子或任何其他网站上自定义URL时,您必须设置新规则。通过这种方式,您可以将它们添加到数据库中,并创建某种非路由处理程序。如果您想保持简单,您可以在数据库中创建一个表,在其中存储URL和要调用的文件的字段
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
选项-多视图-索引
重新启动发动机
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}(+)/$
重写规则^1[L,R=301]
#向前端控制器发送请求。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]