开发者

Create SEO permalinks using PHP without .htaccess

Currently, my page URLs look this this:

http://ourdoma开发者_JAVA百科in.com/articles/?permalink=blah-blah-blah

I want to convert these to:

http://ourdomain.com/articles/blah-blah-blah

How can I accomplish this using PHP but not with .htaccess?


How can i accomplish this using php but not with .htaccess..

You can't. You will need to tell the web server how to deal with URLs that don't physically exist. In Apache, that is done in the central configuration or in a .htaccess file.

If your server already happens to have AccepPathInfo On, you can try having URLs like

http://ourdomain.com/index.php/articles/blah-blah-blah

which will redirect to index.php and have articles/blah-blah-blah in the $_SERVER["PATH_INFO"] variable. This method is known as "poor man's URL rewriting" because you can't get rid of the index.php part in the URL. If the mentioned setting is turned on (I think it is by default), you may be able to do this without using a .htaccess file.


You can achieve this without mod_rewrite if you have access to the server configuration. Assuming you're using Apache, the first thing you would need to do is turn the MultiViews option on on your document root (ie. add Options MultiViews). Now copy your /articles/index.php to /articles.php (so put the script in your document root and rename it), and adapt your script so it reads $_SERVER["PATH_INFO"] to fetch the correct page (this of course relies on having AcceptPathInfo On).

MultiViews will make sure that the articles.php script is called when you provide a /articles/blah-blah URL.


I don't think you can easily do it without altering .htaccess. You'll most definitely need to use mod_rewrite. See the answers here for more info: Special profile page link like www.domain.com/username


It is possible to do it in PHP, without modifying .htaccess

Just write following code in either index.php or default.php

<?php
if (isset($_GET['permalink'])) {
    header('Location: '.urlencode($_GET['permalink']));
}
?>

It works because when you type following URL:

http://ourdomain.com/articles/?permalink=blah-blah-blah

The filename is not specified. So, the server looks whether "index" or "default" file is present in the specified directory.

Consider file index.php is present, so server will call:

http://ourdomain.com/articles/index.php

with blah-blah-blah in GET variable permalink

The PHP code checks if permalink GET variable is present, and redirects using header() method.

EDIT: added urlencode() to do input validation

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜