【问题标题】:How To rewrite a url with PHP?如何用 PHP 重写一个 url?
【发布时间】:2023-03-23 21:16:02
【问题描述】:

比如说我的一个成员是 http://www.example.com/members/893674.php。我如何让他们自定义那里的网址,例如,http://www.example.com/myname

我想我希望我的会员拥有自己的自定义网址。有没有更好的方法通过重新组织我的文件来做到这一点。

【问题讨论】:

  • 这是个好主意,因为后面的 url 方案将对搜索引擎友好。例如,当有人在 google 搜索“myname”时,您网站上的用户页面更有可能出现,因为搜索蜘蛛也会扫描 url 中的关键字。
  • 我之前没有注意到这一点,但在 URL 中 example.com/members/893674.php 893674.php 是针对用户 myname 的。那么每个用户是否有一个像 893674.php 这样的文件?

标签: php url-rewriting


【解决方案1】:

您可以使用前端控制器,它是制作自定义 URL 的常用解决方案,可用于所有语言,而不仅仅是 PHP。这是一个指南:http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

基本上你会创建一个 index.php 文件,它会为每个 URL 调用,它的工作是解析 URL 并根据 URL 的内容确定要运行的代码。因此,在您的网站上,您的 URL 将类似于:http://www.example.com/index.php/myname 或 http://www.example.com/index.php/about-us 或 http://www.example.com/index.php/contact-us 等等。为所有 URL 调用 index.php。

您可以使用 mod_rewrite 从 URL 中删除 index.php,请参见此处:http://www.wil-linssen.com/expressionengine-removing-indexphp/

【讨论】:

  • 并且当所有 URL 调用 index.php 时,它被称为单点入口,这简化了在您的站点上运行的安全检查。我还建议使用 MVC 框架,但将您的应用程序移植到这样的框架可能会很困难。
【解决方案2】:

添加重写规则以将所有内容指向 index.php。然后在您的 index.php 中,解析 url 并获取 myname。在某个表中查找 myname 的路径并包含该路径

RewriteEngine on 
RewriteRule ^.*$ index.php [L,QSA]

index.php:

$myname = $_SERVER['REQUEST_URI'];
$myname = ltrim($myname, '/'); //strip leading slash if need be.
$realpath = LookupNameToPath($myname);

include($realpath);

【讨论】:

    【解决方案3】:

    创建一个新文件并将其名称更改为 (.htaccess) 并将此 apache 命令(仅作为示例)放入其中:

    Options +FollowSymLinks 
    RewriteEngine on
    RewriteRule ^profile/([0-9]*)$ members.php?id=$1
    

    【讨论】:

    【解决方案4】:

    您必须创建一个从 http://www.example.com/myname 指向类似 http://www.example.com/user.php?uname=myname 的重写规则。

    在“.htaccess”中:

    RewriteEngine on
    RewriteRule     ^/(.*)$     /user.php?uname=$1
    #               SourceURL   TargetURL
    

    然后您创建一个“user.php”,它从'uname' GET 变量加载用户信息。

    从你的问题看,你可能已经有基于用户 ID 的用户页面(即'893674.php'),所以你在那里重定向它。

    但我不建议这样做,因为重定向会更改地址栏上的 URL。

    另一种方法(如果您已经有 '893674.php')是包含它。

    不过,最好的方法是在该页面中显示用户的信息(或您对其进行的任何操作)。

    例如:

    <?phg
    vat $UName = $_GET['uname'];
    var $User  = new User($UName);
    
    $User->showInfo();
    ?>
    

    【讨论】:

      【解决方案5】:

      为此,您需要 apache 的 mod_rewrite。单独使用 php 你不会有任何运气。

      见:http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 2013-03-13
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多