So, I've just installed a code pasting utility on my website (like PasteBin basically, but using the open source PASTE script).
At the moment, a paste will be saved in the SQL database, with an integer ID.
The paste utilities directory is http://example.com/paste, and pastes can be found at http://example.com/paste/12345.
What I'd like to do, is create an htaccess rule so that when the user clicks on http://example.com/12345, they will be taken to http://example.com/paste/12345.
I've looked around at other questions, but none seem to ask (or solve) the same sort of question. But I could have looked in the wrong place, and someone will have a link to an answer within minutes of me posting. That would be equally great, but I'd prefer a more tailored solution, if possible.
NOTE: If anyone just wants to change the clickable link from http://example.com/paste/12345 (for example) to http://example.com/p/12345 without changing the actual subfolder name, check out my comment in the Accepted Answer. Otherwise, Dope Monk's solution will work fine for my initial problem.
You will need to have a simple rule in your .htaccess using mod_rewrite. However, you must ensure that mod_rewrite is enabled when you use this rule
Add this:
RewriteRule ^/([0-9]+)/$ /paste/$1 [NC,L]
Related
Hey so im working on a website and one part of it allows you to lookup a user based on their name. At the moment i have it using a $_GET request so the link would look like:
http://website.com/p?name=John+Smith
How would i be able to remove that ?name= because i see alot of sites doing things like:
http://website.com/p/John+Smith
how would i achieve this because to my knowladge their arent any other forum request types only Post and Get?
URL rewriting is definitely what you're looking to do. It's well worth playing carefully with it but lots of testing is recommended. With great power comes great responsibility!
Most dynamic sites include variables in their URLs that tell the site what information to show the user. The example you provided is exactly like this.
Unfortunately, a cleaned up URL cannot be easily understood by a server without some work. When a request is made for the clean URL, the server needs to work out how to process it so that it knows what to send back to the user. URL rewriting is the technique used to "translate" a URL like the last one into something the server can understand.
To accomplish this, you need to first create a text document called ".htaccess" to contain the rules. This would be placed in the root directory of the server. To tell the server to rewrite a URL pattern, you need to add the following to the file:
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^p/[A-Za-z\+]$ /p/?name=$1 [NC,L] # Rewriting rule here
The NC bit denotes case insensitive URLs and the L indicates this is the last rule that should be applied before attempting to access the final URL.
You can do quite a bit with this one rule, but the specifics extend far beyond the space of my answer here.
https://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/
I would highly suggest reading that thorough guide to help you on your quest!
I am a beginner PHP programmer. I searched google for a "Dynamic PHP website tutorials". I found some stuff. They use $_GET variable to make the website dynamic, so the URL's appear like this:
example.com/?page=home
example.com/?page=about
example.com/?page=Downloads
and so on...
But most of the dynamic websites that I found on the internet has links like this:
example.com
example.com/about
example.com/download and so on....
So how do they do so ?? Have they got folders for all the catogories ?? And Also some websites have article URLs (eg : example.com/articles/posts/2010/article1.php). It would be a reall mess if they've got folders for all items. If not then How ?? Can someone give an example please ?
If you're using apache then read: http://httpd.apache.org/docs/current/mod/mod_rewrite.html
If you're using IIS then read: http://www.iis.net/downloads/microsoft/url-rewrite
In order to use the $_GET variable, it must be in the query string (or being routed through some other means that isn't 'default').
For example, the URLs you're using would become.
example.com/?page=home
example.com/?page=about
example.com/?page=Downloads
Additionally, you can rewrite URLs using the .htaccess file (http://httpd.apache.org/docs/2.0/misc/rewriteguide.html)
You are interested in page routing.
htaccess and MVC routing may start you down the correct path :)
To echo everyone else, it's called a url rewite.
For example, the url
http://example.com/index.php?ext=blog&cat=news&date=12122012
can be rewritten as
http://example.com/blog/news/12-12-2012
This isn't automatic, it requires defining the patterns used for understanding the new URL in a file called .htaccess which usually resides in the servers root directory. Note that the preceding '.' in the filename makes it a hidden file.
When I was first getting used to PHP i found the site http://phpbuilder.com a great help. They have a lot of articles, and a forum that is fairly nice to noobies. http://devshed.com is a good site too, and has a large amount of information on subjects outside of PHP.
You can achieve that affect with folders, but most use rewrites (Apache). It's a bit too broad of a subject to go in to here, but if you just search for rewrite tutorials you'll find some pretty quickly.
The $_GET is only to get variables from the URL. While this can be used to make sites dynamic, this is a technique which is usually frowned upon.
With rewrites, you basically have a URL like /about, but the rewrite tells your server something like "act like this is actually ?page="about"), which you then use the $_GET to process.
Being PHP beginner I will not urge you to use .htaccess, As you will need to learn lot many things before you proceed further. You have 2 option to send a request one is GET and POST. You can get more information about same on internet.
Also you have an option to start your dynamic website using CMS and I will recommend you to use wordpress. CMS will have some in-built function which will help you to do your work faster. Also using their control panel you can update the URL format.
I will also urge you to go step by step and follow every tutorial that you will find on internet.
All the best
If you want to do this you have to use .htaccess file and have to load mod_rewrite in your apache server.
In you root directory create file named .htaccess
Then Write:
RewriteEngine On
RewriteRule ^(.*)\.php$ index.php?page=$1 [L,QSA]
And After that call a page
my-page.php
It will redirected as a index.php?page=my-page internally but in browser it will show as my-page.php
I am struggling to find this as I'm not sure exactly what I'm looking for!
I've seen that some sites seem to use 'subfolders' as links to pages, e.g. wikipedia.
E.g. Let's say I had a record in a database with a unique title "My Shopping List". I want to be able to navigate to www.mySite.com/my_shopping_list and have it automatically 'forward' to a page showing the relevant record.
I am using IIS and wondering if there's a way I can do it with that, but I may be looking in the wrong place.
This is for a knowledgebase where I might write an article called "how to use a computer" and would like to be able to create a 'friendly' link for users (http://www.mySite.com/how_to_use_a_computer rather than http://www.mySite.com/article.php?ID=123. I will need to be able to create these 'links' dynamically using the title field.
Thank you
EDIT: I am using IIS6
You should use URL Rewrite, the microsoft ressource for this technique is here: http://www.iis.net/download/urlrewrite
In the iss forum the issue about url rewrite in iss < 7 is discussed with some suggestions on software to use.
I don't know which one is best, maybe there are others who know:
http://iirf.codeplex.com/
http://www.isapirewrite.com/
http://urlrewriter.net/
With PHP, you'll need to code URLConf using something like a htaccess file or the manager GUI. You can read ISS docs on URL rewrite to learn how., but as I understand, this is a module you'll have to download separately.
This question also shows how do do it without editing server configuration files or htaccess, but you'll be stuck with a http://example.com/index.php/path/to/view format (where index.php is a real script with the URLConf in it.)
Well some time ago it was used to call 'Friendly URL' or 'FURL', now i see that it's ust Rewrite URL. Look for tutorials for beginners.
I was not sure how to word this, so I am going to try to explain as well as I can. I have written a plugin system in PHP for a CMS. However, the plugins are contained within their own folder, a page that came with a plugin might look like this:
http://www.mysite.com/plugins/forum/index.php
However, this looks ugly and obviously exposes the site structure of the plugin system. So far I have been getting around this problem like so:
http://www.mysite.com/page.php?id=forum
but that is still kind of ugly even though its a little cleaner than the latter. However, I was wondering if it is possible to create a "dummy" page which is actually just an alias for the page I want. So
http://www.mysite.com/forum.php points to http://www.mysite.com/plugins/forum/index.php
While I can create a page in the root forum.php manually, I was wondering if there was some way to automate it. In other words, when the user calls forum.php which doesn't exist, I have a 404 page hold a piece of PHP code which figures out what is being called (throwing a 404 if its an unknown page call). In other words, if I request forum.php, a piece of code consults the database to find the linker and if it does, spits back the contents of the page under that specific URL.
I hope this is not too confusing. Let me know if its a bit hard to understand the idea... I would greatly appreciate any help!
If you are using apache, the solution is to use mod_rewrite (.htacces)
.htaccess tricks and tips
The idea is to redirect internally to your plugin when the user accesses
http://www.mysite.com/forum.php
Ex: you place this in your .htaccess file in your webroot
RewriteEngine on
RewriteRule ^forum\.php$ /plugins/forum/index.php.php [QSA]
Wordpress uses friendly seo url without using htaccess.
Can any explain this to me please how they do it.
The only way i can think of is to do something like this.
domain.com/index.php/nnn/mmmm/
But wordpress does not use index.php
I know they are not using htaccess.
Please let me know.
Thank you.
WordPress actually has a single .htaccess file that they don't need to change which redirects all requests to index.php
index.php then looks at the permalinks rules and runs a few database queries to determine which page to send you.
So for instance if the permalink rule is %postdate%/%postname% (may not be the actual WordPress permalink variables. I haven't been using WordPress for too long) then it would just use regular expressions (or combinations of substr() and strpos()) to put %postdate% and %postname% into variables. Next it runs a simple database query for any item matching that date and that name. If nothing is found, redirect to search. If you find more than one, list them all (like a category page). If you find one and only one, send that page.
As far as actually "sending" the page, that's just a matter of settings certain variables (such as $the_post['content']) and then include()'ing the proper theme file.
include()'ing the theme file is a simple if() statement.
if(file_exists("wp-content/themes/<your_theme>/$the_post['type'].php")){
include("wp-content/themes/<your_theme>/$the_post['type'].php");
} else {
include("wp-content/themes/<your_theme>/index.php");
}
Mind you these aren't the exact variable names or the exact functions as they occur. This is just a very simplified version to give the general idea of how these systems work.
Wordpress does use .htaccess files. You can modify the permalinks in the permalinks section your wordpress site. You can see information on it here.
If you are using IIS you can use this method
Wordpress does actually use .htaccess. Make sure you have hidden files displayed! If you're FTP-ing, there'll be a setting in your client.
To answer the main question:
No.
As for the other points of yours:
Wordpress uses friendly seo url without using htaccess.
USUALLY it does not.
USUALLY it requires the .htaccess to make nice urls work.
However, as Wordpress' Codex says:
If you are using IIS 7 and have admin rights on your server, you can
use Microsoft's URL Rewrite Module instead. Though not
completely compatible with mod_rewrite, it does support WordPress's
pretty permalinks.
So they are always using some kind of rewrite module anyway.
Can any explain this to me please how they do it.
There is one interesting thing to explain:
There is only one .htaccess file.
Which would not be so interesting if it would contain some kind of general rule rewriting urls to some.php's GET parameters (domain.com/verynice => domain.com/index.php?page=verynice).
But that is not happening.
What is happening is that
It rewrites ANY url that is NOT a specific FILE or DIRECTORY to index.php EXCEPT the index.php (to prevent infinite loop).
So urls like domain.com/blah/blah and domain.com/lol/trololo are both actually requesting the index.php - the only difference is in the requested URI.
Using superglobal variables like $_SERVER['REQUEST_URI'] they get the requested URI and after that they parse the requested URI and store the results in varibles accordingly.
The only way i can think of is to do something like this.
domain.com/index.php/nnn/mmmm/
In common explanation of the URL this is NOT request to the index.php file itself.
It is a request for the "mmmm" folder in folder "nnn" which is in folder "index.php".
However apache usually understand this as a request for the index.php file .
For other files e.g. my.file domain.com/my.file is a file request, domain.com/my.file/ is a folder request (notice the slash / at the end)
But wordpress does not use index.php
That is NOT TRUE.
Especially if you are using nice-urls the index.php is practicaly fundamental for Wordpress.
I know they are not using htaccess.
This point of yours could meant 3 things:
They are using the htaccess but not for processing the URL (which I've explained above)
They are not using it at all - not true, unless they would be using the MS' URL Rewrite Module
You don't know. You did not provide any information about how did you find out they are not using it, so we can't know if you really know or you just think that :)
Please let me know.
I let you know. And I hope I've answered all your questions :), if not - use comments :)
Thank you.
You are welcome.
I was happy to help :) ☺ ☺ ☺ ☺ ☺