Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP URL重写-无法获取查询字符串参数_Php_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

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 在这个站点上,我有

我在一个网站上工作,同时学习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
在这个站点上,我有一个简单的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]