Php 在I';我正在用.htaccess重写url

Php 在I';我正在用.htaccess重写url,php,apache,import,url-rewriting,Php,Apache,Import,Url Rewriting,我通过一个index.php文件向我的站点发出所有请求,如果用户输入www.example.com/products/20我希望我的index.php文件导入并呈现文件/products/index.php,然后仍然能够使用product\u id=20参数。每次我试图访问www.example.com/products/20我的index.php文件时,似乎都试图导入/products/31而不是/products/index.php。我正在用.htaccess重写我的url。我有没有办法从这

我通过一个
index.php
文件向我的站点发出所有请求,如果用户输入
www.example.com/products/20
我希望我的
index.php
文件导入并呈现文件
/products/index.php
,然后仍然能够使用
product\u id=20
参数。每次我试图访问
www.example.com/products/20
我的
index.php
文件时,似乎都试图导入
/products/31
而不是
/products/index.php
。我正在用.htaccess重写我的url。我有没有办法从这个url导入正确的页面(即
example.com/products/20
)?

确定您的需求 你有产品记录。要查看第20条记录,需要将product_id=20传递给脚本。为此,您可以在查询字符串
?product_id=20
中传递它,也可以创建一个搜索引擎友好的url
/product/20
。后者需要url重写,通常在
.htaccess

不要混淆--
.htaccess
不会创建搜索引擎友好的url(SEF);它解释它并将控制权传递给某个页面,即,
/index.php

有很多教程介绍如何制作
.htaccess
来实现这一点;一般情况下,它将如下所示:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^topic/([a-zA-Z0-9]+)/$ index.php?topic=$1
在您的情况下,您只需将
^product
替换为
^topic
,将
product\u id
替换为
topic
。哦,把正则表达式改成
[0-9]

这将实现什么? 现在,当一个请求以/product/{someNumber}的形式出现时,mod_rewrite将把它转换为
/index.php?product_id={someNumber}
。因此,如果键入
www.example.com/product/20
www.example.com/index.php?product_id=20
,它们将转到同一脚本

注意:只有在开始时与
产品
匹配的URI才会受到影响。如果您键入
www.example.com/users/20
,则web服务器将在
{documentRoot}/users/20
中查找索引文件

使用index.php 对于所有以
/product
开头的URI,现在可以使用index.php作为控制器。换句话说,您可以使用传入的参数来确定脚本从那里执行的操作——加载什么逻辑,使用什么视图,等等

在这个例子中,它非常简单;进入index.php的所有内容都将是产品视图

<?php
require("../views/header.php");
$query = "select * from products where product_id = ?";
// do your database call and print out results
require("../views/footer.php");
更多动态页面 你不仅仅局限于产品。说你也想要用户。只需添加更多参数

RewriteRule ^page/([a-zA-Z]+)/([0-9])$ my_simple_controller.php?action=$1&value=$2
在my_controller.php中

require("../views/header.php");
switch($action) {
  case 'product':
    // display product
    break;
  case 'user':
    // display user
    break;
}
require("../views/footer.php");
现在,以/page/product开头的所有内容都将显示一个产品,/page/user将显示一个用户


希望这能为您指明正确的方向。

您能提供更多详细信息吗,因为问题现在还不清楚。您好@Neodan,我刚刚编辑了这个问题您想从
/products/20
index.php?product_id=20
访问一个页面吗?另外,请发布您当前的.htaccess
require("../views/header.php");
switch($action) {
  case 'product':
    // display product
    break;
  case 'user':
    // display user
    break;
}
require("../views/footer.php");