0

我试图为我脑海中的一个问题找到答案,但似乎我找不到它。

如何用“?”制作一些 php url 和“=”到/

示例一 (1):

example.com/user.php?profile=example

到:

example.com/user/profile/example

示例二 (2):

example.com/forum.php?thread=example-in-an-example

到:

example.com/forum/thread/example-in-an-example

就像将第二个“/”(斜杠)作为“?”的代码一样。第三个和其余的作为“=”,所以我可以自由使用它,而不是为每一页制作一个新的......

LIKE:/forum(或任何其他)就像页面本身 AND:/thread(或任何其他)就像 $_GET AND:/example-in-an-example(或任何其他)就像 $ 的值_得到

额外:这是来自 Jeroen 的代码:

RewriteRule ^(.*)/(.*)/(.*)/$ $1.php?$2=$3 [L]

问题一 (1):当喜欢:“example.com/forum”或“example.com/user”时会出现 404 错误问题二 (2):当使用“example.com/forum/thread/”之类的链接时test-thread/reply/2" 它给出 404 错误,(假设在制作第一个真实的之后使用“&”和“=”循环,这样它就可以使用多个 $_GET)

4

2 回答 2

4

将此添加到您的 .htaccess 文件中:

RewriteEngine On
RewriteRule ^user/profile/(.*)/$ user.php?profile=$1 [L]
RewriteRule ^forum/thread/(.*)/$ /forum.php?thread=$1 [L]

或者更通用的版本...

RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)/$ $1.php?$2=$3 [L]

确保启用 Apache 的mod 重写

于 2012-05-26T22:23:41.450 回答
1

如果您对应用程序具有完全访问权限并且可以修改代码,我可以向您提交一些我通常用于 REST 实用程序的技巧。

AllowOverride All放入 apache 配置中以启用 .htaccess 文件。确保也加载您的mod_rewrite模块。

在您的 Web 服务器文档根目录(您的应用程序路径)中创建一个 .htaccess 文件并将这些内容放入其中:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

创建一个名为 index.php 的文件并将其放入其中,这将是您的控制器:

<?
        // echo "REQUEST_URI: " . $_SERVER['REQUEST_URI'] . "</br>\n";
        $controller = explode("/", $_SERVER['REQUEST_URI']);
        //print_r($controller);

        $resource = $controller[1];
        $operation = $controller[2];
        $operation_value = $controller[3];

        echo "Requested resource: $resource, opetation: $operation, value: $operation_value<br>\n";

        switch($resource) {
        case 'user':
                echo "User requested\n";
                //require_once("user.php");
                break;
        case 'forum':
                echo "Forum requested\n";
                //require_once("forum.php");
                break;
        /* add any other resource */
        default:
                echo "Requested page was not found.\n";
                break;
        }
?>

当用户调用http://example.com/user/profile/ZeroXitreo时,页面将呈现为:

Requested resource: user, opetation: profile, value: ZeroXitreo
User requested 

当用户调用http://example.com/forum/thread/example-in-an-example时,页面将是:

Requested resource: forum, opetation: thread, value: example-in-an-example
Forum requested 

阅读控制器的 PHP 代码,我认为这很自我解释。

于 2012-05-26T23:07:34.283 回答