How was a URL like http://stackoverflow.com/posts/

2019-02-26 02:24发布

When you edit a question on stackoverflow.com, you will be redirected to a URL like this:

https://stackoverflow.com/posts/1807421/edit

But usually, it should be

https://stackoverflow.com/posts/1807491/edit.php

or

https://stackoverflow.com/posts/edit.php?id=1807491

How was

https://stackoverflow.com/posts/1807421/edit created?

I know that Stackoverflow.com was not created by using PHP, but I am wondering how to achieve this in PHP?

8条回答
Deceive 欺骗
2楼-- · 2019-02-26 03:05

It's called routing. Take a look at tutorials on the subject.

If you use a framework such as cake php it should be built in.

查看更多
乱世女痞
3楼-- · 2019-02-26 03:06

As @mr-euro stated you can use mod_rewrite but front controller is a far better solution. You force every request to index.php and you write your application controlling in index.php.

查看更多
Bombasti
4楼-- · 2019-02-26 03:12

You use Apache's .htaccess/mod_rewrite, and optionally a PHP file, which is the approach I like to take myself.

For the .htaccess, something like this:

RewriteEngine On
RewriteRule ^(.*)$ index.php

Then in your PHP file, you can do something like this:

The following should get everything after the first slash.

$url = $_SERVER['REQUEST_URI'];

You can then use explode to turn it into an array.

$split = explode('/', $url);

Now you can use the array to determine what to load:

if ($split[1] == 'home')
{
// display homepage
}

The array is starting from 1 since 0 will usually be empty.

查看更多
▲ chillily
5楼-- · 2019-02-26 03:13

You could use htaccess + write an URI parser class.

查看更多
太酷不给撩
6楼-- · 2019-02-26 03:16

I am poor at this but i do know you can redirect urls using apache mod_rewrite and by touching config files. From what i remember htaccess can be used to redirect. Then internally when the user hits http://stackoverflow.com/posts/1807421/edit it can use your page http://stackoverflow.com/edit.php?p=1807421 instead or whatever you want.

查看更多
放荡不羁爱自由
7楼-- · 2019-02-26 03:19

It's indeed done by mod_rewrite, or with multiviews. But i prefer mod_rewrite.

First: you create a .htaccessfile with these contents:

RewriteEngine On
RewriteRule ^posts/([0-9])/(edit|delete)$ /index.php?page=posts&postId=$1&action=$2

Obvious, mod_rewrite must be enabled by your hostingprovider ;)

查看更多
登录 后发表回答