clean urls mod_rewrite and mysql...howto
clean urls mod_rewrite and mysql...howto
am 07.08.2007 11:11:05 von ben.brughmans
I use mod_rewrite all the time, but I was still asking myself how you
combine it with a database.
e.g. you have an article with the title : "Mac, windows or linux. Who
will tell?"
so I can get something like this : http:///www.domain.com/article/mac-windows-or-linux-who-will -tell
What should I do?
1. just urlencode the title (but then I have problems with the ,
and .)
2. use a regular expression to filter out the special characters
(replace spaces and ", ." by "-" ... etc) and save the filtered-title
into the database? When I want to search for this article I just
perform a regular expression on the title string and search for it in
the databse: WHERE title = ".regularexpressionfunction($title)."
3. Or don't you save this title into the database, but do you always
perform this regular expression while searching in the database? e.g.
WHERE REGEX(title) LIKE '".regularexpressionfunction($title)."'
I have been googling for a long time, but I can't find a descent
article about this ...
thanks for your help!
Re: clean urls mod_rewrite and mysql...howto
am 07.08.2007 11:48:46 von purcaholic
On 7 Aug., 11:11, Geradeaus wrote:
> I use mod_rewrite all the time, but I was still asking myself how you
> combine it with a database.
>
> e.g. you have an article with the title : "Mac, windows or linux. Who
> will tell?"
>
> so I can get something like this : http:///www.domain.com/article/mac-windows-or-linux-who-will -tell
> What should I do?
>
> 1. just urlencode the title (but then I have problems with the ,
> and .)
>
> 2. use a regular expression to filter out the special characters
> (replace spaces and ", ." by "-" ... etc) and save the filtered-title
> into the database? When I want to search for this article I just
> perform a regular expression on the title string and search for it in
> the databse: WHERE title = ".regularexpressionfunction($title)."
>
> 3. Or don't you save this title into the database, but do you always
> perform this regular expression while searching in the database? e.g.
> WHERE REGEX(title) LIKE '".regularexpressionfunction($title)."'
>
> I have been googling for a long time, but I can't find a descent
> article about this ...
>
> thanks for your help!
In my opinion the best way to handle article titles in url's is to
store them into the database as an additional table field. A field
named 'title' contains article title and 'urltitle' contains the
prepared title used for urls.
You don't need to search inside 'urltitle' use the real title instead.
'urltitle' is necessary if you want to link to the results.
If someone requests the page http://www.domain.com/article/mac-windows-or-linux-who-will- tell,
apaches mod rewrite engine will maybe pass this to an script as an
parameter value pair like article=mac-windows-or-linux-who-will-tell.
Now, you can execute a statement like "select * from articles where
urltitle='mac-windows-or-linux-who-will-tell'" to get the content of
the article. This way requires urltitles to be unique, otherwise you
would get more results.
purcaholic
P.S.: You can also dive into the core of some blogs, cms, etc. to find
out, how they solved this...
Re: clean urls mod_rewrite and mysql...howto
am 07.08.2007 14:19:46 von colin.mckinnon
On 7 Aug, 10:48, purcaholic wrote:
>
> If someone requests the pagehttp://www.domain.com/article/mac-windows-or-linux-who-w ill-tell,
> apaches mod rewrite engine will maybe pass this to an script as an
> parameter value pair like article=mac-windows-or-linux-who-will-tell.
> Now, you can execute a statement like "select * from articles where
> urltitle='mac-windows-or-linux-who-will-tell'" to get the content of
> the article. This way requires urltitles to be unique, otherwise you
> would get more results.
>
You can do this without using mod_rewrite (depending on how your
webserver is configured), if say your page is at
http://example.com/path/article.php
And the user goes to a page...
http://example.com/path/article.php/something/else/blah-blah -blah
then the same *script* will be accessed - the trailing stuff can be
found in $PHP_SELF (or some other $_SERVER vars)
HTH
C.
Re: clean urls mod_rewrite and mysql...howto
am 07.08.2007 14:32:15 von Toby A Inkster
purcaholic wrote:
> P.S.: You can also dive into the core of some blogs, cms, etc. to find
> out, how they solved this...
I'm sure that the very first CMS you'd investigate would be demiblog
;-)
demiblog uses roughly the technique that purcaholic describes. Blog
articles are given URLs like '/blog/YYYY/MM/DD/FOOBAR/' and the relevant
fields in the database are:
article_date timestamp
url_part varchar
So when, say, the URL in my signature is visited, the CMS will search for
blog articles with article_date='2007-08-02' AND
url_part='command-line-again'. This way the article_date can be different
from the date the article was first created on, and different from its
last-modified date, and the url_part can be different from the
article_title, which is often useful if you have a post with a really long
title, but don't want your URL to be too long!
--
Toby A Inkster BSc (Hons) ARCS
[Geek of HTML/SQL/Perl/PHP/Python/Apache/Linux]
[OS: Linux 2.6.12-12mdksmp, up 47 days, 16:04.]
Command Line Interfaces, Again
http://tobyinkster.co.uk/blog/2007/08/02/command-line-again/
Re: clean urls mod_rewrite and mysql...howto
am 07.08.2007 15:24:36 von gosha bine
On 07.08.2007 11:11 Geradeaus wrote:
> I use mod_rewrite all the time, but I was still asking myself how you
> combine it with a database.
>
> e.g. you have an article with the title : "Mac, windows or linux. Who
> will tell?"
>
> so I can get something like this : http:///www.domain.com/article/mac-windows-or-linux-who-will -tell
> What should I do?
>
> 1. just urlencode the title (but then I have problems with the ,
> and .)
>
> 2. use a regular expression to filter out the special characters
> (replace spaces and ", ." by "-" ... etc) and save the filtered-title
> into the database? When I want to search for this article I just
> perform a regular expression on the title string and search for it in
> the databse: WHERE title = ".regularexpressionfunction($title)."
>
> 3. Or don't you save this title into the database, but do you always
> perform this regular expression while searching in the database? e.g.
> WHERE REGEX(title) LIKE '".regularexpressionfunction($title)."'
>
> I have been googling for a long time, but I can't find a descent
> article about this ...
>
> thanks for your help!
>
A title to url conversion is simple
function title_to_url($title) {
preg_match_all('/\w+/', strtolower($title), $m);
return implode('-', $m[0]);
}
echo title_to_url("Mac, windows or linux. Who will tell?");
The opposite (given an url, find an article) is far more complicated.
There are two approaches: store url in the database, as others
suggested, or split an url to words and perform the full text search for
those words. The latter has an advantage that users will be able to use
different urls to access the same article, e.g.
http:///www.domain.com/article/linux-who-will-tell
or
http:///www.domain.com/article/linux-mac-windows
etc.
--
gosha bine
makrell ~ http://www.tagarga.com/blok/makrell
php done right ;) http://code.google.com/p/pihipi
Re: clean urls mod_rewrite and mysql...howto
am 16.08.2007 09:29:06 von ben.brughmans
On 7 aug, 15:24, gosha bine wrote:
> On 07.08.2007 11:11 Geradeaus wrote:
>
>
>
> > I use mod_rewrite all the time, but I was still asking myself how you
> > combine it with a database.
>
> > e.g. you have an article with the title : "Mac, windows or linux. Who
> > will tell?"
>
> > so I can get something like this : http:///www.domain.com/article/mac-windows-or-linux-who-will -tell
> > What should I do?
>
> > 1. just urlencode the title (but then I have problems with the ,
> > and .)
>
> > 2. use a regular expression to filter out the special characters
> > (replace spaces and ", ." by "-" ... etc) and save the filtered-title
> > into the database? When I want to search for this article I just
> > perform a regular expression on the title string and search for it in
> > the databse: WHERE title = ".regularexpressionfunction($title)."
>
> > 3. Or don't you save this title into the database, but do you always
> > perform this regular expression while searching in the database? e.g.
> > WHERE REGEX(title) LIKE '".regularexpressionfunction($title)."'
>
> > I have been googling for a long time, but I can't find a descent
> > article about this ...
>
> > thanks for your help!
>
> A title to url conversion is simple
>
> function title_to_url($title) {
> preg_match_all('/\w+/', strtolower($title), $m);
> return implode('-', $m[0]);
>
> }
>
> echo title_to_url("Mac, windows or linux. Who will tell?");
>
> The opposite (given an url, find an article) is far more complicated.
> There are two approaches: store url in the database, as others
> suggested, or split an url to words and perform the full text search for
> those words. The latter has an advantage that users will be able to use
> different urls to access the same article, e.g.
>
> http:///www.domain.com/article/linux-who-will-tell
>
> or
>
> http:///www.domain.com/article/linux-mac-windows
>
> etc.
>
> --
> gosha bine
>
> makrell ~http://www.tagarga.com/blok/makrell
> php done right ;)http://code.google.com/p/pihipi
Thanks,
maybe the solution to save the title to url conversion is the best
indeed... thanks for all your help!