Create SEO permalinks using PHP without .htaccess

我的未来我决定 提交于 2019-12-31 07:07:22

问题


Currently, my page URLs look this this:

http://ourdomain.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?


回答1:


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.




回答2:


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.




回答3:


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




回答4:


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



来源:https://stackoverflow.com/questions/5015352/create-seo-permalinks-using-php-without-htaccess

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