【问题标题】:How do I modify Request_URI using Apache or PHP?如何使用 Apache 或 PHP 修改 Request_URI?
【发布时间】:2023-03-10 23:31:01
【问题描述】:

我想要一些关于 URL 重写魔法的帮助。我无法修改 Request_URI 变量。

我想在http://host.com/alphahttp://host.com/beta 两个站点之间切换。它们都由相同的 php 脚本处理。这个脚本是http://host.com/index.php

index.php 期望得到一个 GET 变量SITE 来告诉它要显示哪个站点。它还使用 REQUEST_URI 来确定要显示的内容。为了使其工作,alphabeta 需要从原始请求中删除。这就是我卡住的地方。

所以 REQUEST_URI 从 /alpha/content/file 开始,需要变成 /content/file。

我已经在 .htaccess 中使用 mod_rewrite 尝试过:

RewriteCond %{REQUEST_URI} /(alpha|beta)(.*)   
RewriteRule .* index.php?site=%1  

index.php:

<?php
echo "Site: " . $_GET['site'] . "<br/>";
echo "Request_URI: " . $_SERVER['REQUEST_URI'] . "<br/>";
//get_html($_SERVER['REQUEST_URI']);
?>

我希望使用 Apache 的 SetEnvIf 和 A​​lias 能有更好的运气。

任何关于如何做到这一点的想法将不胜感激。谢谢。

【问题讨论】:

    标签: php apache mod-rewrite url-rewriting


    【解决方案1】:

    很容易管理:

    RewriteRule ^(alpha|beta)/?(.*) /$2?site=$1 [R,L]
    

    这将临时重定向(HTTP 状态代码 302)任何以“alpha”或“beta”开头的 URL 到开头没有“alpha”或“beta”但作为查询字符串附加到查询的资源变量“站点”。

    例子:

    // Will be redirected to http://host.com/shoes/nike/order.php?site=alpha
    GET http://host.com/alpha/shoes/nike/order.php
    

    编辑 这不会考虑原始 GET 调用提供的查询字符串。如果您需要这些,请执行以下操作:

    RewriteRule ^(alpha|beta)/?(.*) /$2?site=$1 [QSA,R,L]
    RewriteRule .* index.php [NC,L]
    

    干杯!

    【讨论】:

    • 是的,这就是我要找的。我还没有让它工作。我看到 404 错误..
    • 您必须使用另一个规则将重定向映射到您的根目录中的 index.php(只是猜测,我不知道您的布局)。这将让您处理 index.php 中的所有内容,并拥有正确的 REQUEST_URI 以了解客户端请求的内容。
    猜你喜欢
    • 2013-09-08
    • 2021-12-08
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多