简体   繁体   中英

How to Dynamically Rewrite a URL like Facebook

I've written my site using PHP and unfortunately the Artist profiles are currently like this:

website.com/profiles.php?id=xxx

That way I can GET the id and query the database.

However the Artists are now asking for website.com/artistname as their URL. Like Facebook and Myspace I guess.

I still need to be able to GET the artists id though, so that I can query the database.

I guess I'm going to have to use the mod_rewrite and also trigger a php function somewhere but I'm not exactly sure how to do it!

I've spent the past day looking online to find something like this, but I can't seem to find exactly what I want!

If anyone's got any ideas on how I could do this, or examples to help me that would be great!

Thanks

If you do not want the ID in the URL, the artist names need to be the new ID and thus unique.

In that case you can do the following in the .htaccess file in your document root directory to rewrite /<artistname> internally to /profiles.php?name=<artistname> :

RewriteEngine on
RewriteRule ^([a-z]+)$ profiles.php?name=$1

Here the artist name is also restricted to only consist of alphabetic letters. For other characters (especially . and / ) you should take into account not to allow values that conflict with existing files (eg profiles.php ). And if you derive the URL artist names from their real names, make sure not to allow conflicts either. In that case you will still need the artificial ID to make the URL path unique.

You can use a URL "slug", whereby a record has a unique name, ie:

id     name             slug
001    Stack Overflow   stack-overflow

then you could perform a query such as:

SELECT `fields` FROM `table` WHERE `slug`='$slug'

where slug is the value from the URL.

There are alternatives as I'm sure will be provided.

You can use Gumbo's answer, but you also have one possible shortcut:

You can also redirect the /artistname url to /profiles.php?id=xxx by using a 404 handler

Here's how you would do it:

  1. create a file called /router.php
  2. Edit your .htaccess file and add this line into it: ErrorDocument 404 /router.php
  3. Make router.php lookup the artist ID and redirect to /profiles.php?id=xxx - if nothing is found, router.php can redirect to another 404 page or do a 404 header + message

The good thing about this method, is that you don't have to have mod_rewrite enabled. (if that's a problem)

Firstly, you need alter your artists table, adding a new column for define an alias for artists, like 'david-matthews-band', create an index unique to prevent confusions with homonym artists.

You need edit your profile.php to find artists by alias, like website.com/profile.php?q=david-matthews-band

Create a rewrite rule to transform website.com/profile/david-mattews-band to website.com/profile.php?q=david-matthews-band:

RewriteEngine On
RewriteRule ^profile/*  profile.php?q=$1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM