How was a URL like http://stackoverflow.com/posts/1807421/edit created in PHP?

♀尐吖头ヾ 提交于 2019-12-20 02:57:11

问题


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?


回答1:


With apache and PHP, you might perform one of your examples using a mod_rewrite rule in your apache config as follows:

RewriteEngine On
RewriteRule ^/posts/(\d+)/edit /posts/edit.php?id=$1

This looks for URLs of the "clean" form, and then rewrites them so that they are internally redirected to a particular PHP script.

Quite often rules like this are used to route all requests into a common controller script, which might do something like instantiate a "PostsController" class and ask it to handle an edit request. This is a common feature of most PHP application frameworks.




回答2:


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:


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.




回答4:


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.




回答5:


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 ;)




回答6:


Using mod_rewrite this can be achieved very easily.




回答7:


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.




回答8:


You could use htaccess + write an URI parser class.



来源:https://stackoverflow.com/questions/1807906/how-was-a-url-like-http-stackoverflow-com-posts-1807421-edit-created-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!