How to change appearance of URL from within a PHP script - php

I have some PHP and HTML in the same file, and I am not exactly sure how to make the URL appear as the name of that page.
Here is an example of what I would like to do: lets say some page id = 1 and the title of that page is HelloWorld.
Instead of site.com/page.php?id=1 I would like the url to appear as site.com/HelloWorld
But the problem I am having is that I only get to know the title of the page inside that page after I query for the title by id.
Considering the setup I described, is there a way to make the urls appear as the names of the pages? And also, if someone links to that page by using the better looking url with the name of the page instead of the id, is there still a way to get the id and by that, the rest of the page contents?
Thanks!!

What you need is to learn more on how .htaccess work.
Here is a good link that got me started:
.htaccess tricks and tips
Update:
Here is a very common practice in many framework where all requests are sent to index.php, and from there you use php to serve the correct page:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.site.com/index.php [L,R=301]
</IfModule>

This is actually a function of your HTTP server software (often Apache), not of PHP.
What you're seeing happen on sites with "friendly" URLs is that the friendly name is captured in a Regular Expression and then passed to PHP.
For example:
GET /HelloWorld
is sent to your web server.. the web server parses it
RewriteCond ^(A REGULAR EXPRESSION TO CAPTURE YOUR FRIENDLY NAME)$
RewriteRule page.php?id=(EXPRESSION FROM ABOVE)
In this way your PHP script will always receive the friendly name as a parameter.
Take a look at "mod_write" for Apache - which you can often create rules for using an ".htaccess" file in the root directory.

Related

PHP - how to display customized page url in browser

I am using Windows IIS 7 with PHP and MySQL.
Whenever someone opens an account on my website, he/she will also create one store ID like MyHawaiiSpa. Once this store ID is generated, it can not be changed. Here I have assumed the pkid of this account is 1.
Now, a visitor clicks the MyHawaiiSpa store link from the home page. The visitor will be sent to shop.php where all items belonging to MyHawaiiSpa will be displayed. By clicking on any product on the MyHawaiiSpa store, the product.php page will open, where product details are displayed.
Currently, I have managed it using querystring in PHP. so each store is distinguished like this: mywebsite.com/user/shop.php?sid=1.
My question is now this: I would like visitor clicks on the MyHawaiiSpa store link from the home page, so that the visitor will see mywebsite.com/user/MyHawaiiSpa/shop.php instead of mywebsite.com/user/shop.php?sid=1 (which I have already done now.)
The solution I was thinking of was this: Whenever someone opens an account and creates their store ID, the folder MyHawaiiSpa will be created and the shop.php as well as the product.php pages will be copied under the MyHawaiiSpa folder programmatically. This process will be repeated for all stores those are going to be created.
Is there any other way to do this so I don't need to create a folder and copy files for each store and still I can get desired result I just explained above?
Well it bad idea to copy PHP file when someone registered, it will be mess to maintain it in long term, you just need to store the ID MyHawaiiSpa as unique key in database. and use store id as slug in URL.
since you are using IIS here is good read to rewrite URL
http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/provide-url-rewriting-functionality
You can learn .htaccess mod_rewrite from this link
and then you can covert these rules to IIS7 friendly using this link
You need to use URL rewriting . It is very easy to learn and implement.
On linux servers it is done using a file call .htaccess. On IIS I think file is called
web.config
Basically what this does is, you configure it to show one url while in reality you go to another url.
These links should get you up and running fast
http://www.robbagby.com/php/php-and-iis-running-php-under-fast-cgi-and-url-rewriting/
http://salopek.eu/content/26/introduction-to-url-rewriting-using-iis-url-rewrite-module-and-regular-expressions
https://www.youtube.com/watch?v=guzJWqNJ3DA&feature=channel
http://www.phpgenious.com/2010/04/url-rewriting-with-php-and-iis-7/
http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/provide-url-rewriting-functionality
A good way to do this is an .htaccess rewrite which will allow you to turn your query into an SEO-friendly url and still read properly when called on that page.
Here is apache documentation
A basic example of a rewrite to force all requests through the index page unless they are a real folder or file would be something along the lines of:
RewriteEngine On
RewriteCond %{REQUEST_URI} !(/$|\.|^$)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [NC,QSA,L]
To do a similar rewrite on a windows server you would need to edit a web.config file.

Mobile Redirect using htaccess

My site is:
example.com
My mobile version:
m.example.com
Profile page is
example.com/profile or m.example.com/profile
Or posting page
example.com/posts or m.example.com/posts
Mobile version's url is similar. So, how to redirect the same page?
For example: user go (from facebook) into example.com/posts but he uses mobile device,
so how to redirect via .htaccess to m.example.com/posts
I saw this one threat, but i'm confuse to create right rules.
Thanks :)
Your question is similar to this question, except that you want to redirect the user. First you need a list of mobile user-agents. I am not going to suggest a list, but I think you should be able to find a list that is suitable for you.
Next, you want to go to your .htaccess file and add something like this:
RewriteCond %{HTTP_USER_AGENT} ^(user-agent1|user-agent2|user-agent3|etc)$
RewriteCond %{HTTP_HOST} !^m\.example\.com$
RewriteRule ^(.*)$ http://m.example.com/$1 [R,L]
The first RewriteCond contains all user-agents you want to redirect. Remember that it is a regex, so you have to escape any special characters! The second RewriteCond checks if the host isn't already m.example.com. If we wouldn't check for this, we would create an infinite loop, redirecting to the same url over and over. The RewriteRule itself matches everything after the hostname (and before the query string) and redirects it to the mobile site. $1 gets replaced with the first capture group in the regex in the first argument of RewriteRule. The [R] flag is not necessary in this case (links with http:// will always be redirected), but it let's Apache know that it should do an external temporary redirect to the new url. The [L] flag will stop processing more rules if this rule matches.
See the documentation for more information.

Specific mod rewrite on URL with multiple variables

appreciate help in advance. I'm using mod rewrite and need help in converting specific PHP URLS into prettier URLs.
Specifically, I want to convert the PHP URL:
www.sample.com/subcategory.php?subcategory=sports-achievement&page=1
to
www.sample.com/sports/sports-achievement.html
for the user.
So to be specific, the rule is:
a) the first part of the subategory before the dash should be the
directory (e.g., sports- - into /sports/
b) the entire subcategory as
the page string "sports-achievement.html
c) the PHP pages still needs
to pass the page strings (as there are multiple pages)
Thanks in advance for your help!
To get the the redirect and internal rewrite, you'll have to do something like this.
#Redirect
RewriteCond %{THE_REQUEST} (GET|POST)\ /subcategory\.php\?subcategory=([^-]+)-([^&]+)(&(.*)|)\ HTTP
RewriteRule ^subcategory\.php$ /%2/%2-%3.html?%5 [R,L]
#Internal rewrite
RewriteRule ^(.*)/\1-(.*)\.html$ subcategory.php?subcategory=$1-$2 [QSA,L]
There is no real way of hiding the page name. You can use a post-request and hide it in the post-body. My answer to this question shows how to do it with cookies, but this will most likely confuse search engines, as different pages are somehow available under the same page name.

Blog feed/archive pages using PHP/SQL

I have been asked to create a website and wanted to design it so that the user may add new blog posts to a news feed. I've tried this and successfully created a very simple blogging feature which adds/reads entries in a sql database.
However I want to dynamically create new webpages for each blog entry that is added by the user. How would I go about this? I am new to Php/Sql and so I am unsure of where to start. Any pointers in the right direction would be greatly appreciated.
As for an example of what im after, see: http://kingslandprimaryschool.co.uk/
Thanks
The solution is to hire an army of employees, who manually create hundreds of scripts. A lot of work, but what else can you do? Nah, just kidding.
The trick is not to create a new file for every blog page, you just have to change the routing. Start by creating a blogging system which works through consistent URL's, such as blog.php?p=home. When you've finished, create a .htaccess file which routes certain requests to that page. For example, if you would want an URL like my.site/home to load blog.php?p=home you would need the following .htaccess script:
<IfModule mod_rewrite.c>
RewriteEngine On
# Allow existing directories and files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# Route the request
RewriteRule ^(.*)$ blog.php\?p=$1 [QSA]
</IfModule>
This would first check whether a file exists at the requested URL. If it does, it shows that file. Otherwise, blog.php?p=myPath is opened. The [QSA] tag after the redirect means that everything after the question mark is passed on to the script you redirect to, so if you would go to my.site/home?day=wednesday the page blog.php?p=home&day=wednesday would be loaded.
If you need more help, feel free to ask any question. Alternatively, you can just Google "htaccess mod_rewrite" or "PHP pretty url" for more information. Hope this was of help!

htaccess for dynamic web pages

I have a website and i am using MySQL to store and fetch data from, there is a bunch of data of different destinations (Yes this is a travel agent website) i am wondering how can i setup .htaccess file to display SEO friendly URL
For example: http://www.mywebsite.com/flights-result.php?id=10 this URL is a details page for a flight to Entebbe in Africa, i would like to have the URL for this like http://www.mywebsite.com/Africa/Entebbe.htm
And so on for them, one more thing do i need to add this for every page? the data is being update on daily basis so is there any easy way to write URL automatically?
Any help highly appreciated.
I don't really think what you are trying to accomplish has anything to do with mysql. What you are looking for is called URL rewriting. There are countless number of articles out there that could show you the direction to follow. I am not very sure which web server you are using right not. I presume it is Apache. Here is Apache module_rewrite guide.
Given the original URL, there isn't all the information in there to use mod_rewrite to do this completely.
So what you could do it send all web requests to a controller file, and from there parse the request uri and load the correct page.
So in htaccess, something like...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ controller.php [L]
Then in controller.php you parse the url and load the correct page.
A different option you may prefer, (if you're flexible on the specific final URL) is to have URLs ending up looking like this:
http://www.mywebsite.com/flights/10/Africa/Entebbe.htm
This would likely be simpler to do instead of implementing a controller (although I prefer the controller for routing requests).
So in htaccess...
RewriteRule
^/flights/([0-9]{1,10})/([a-zA-Z]+)/([a-zA-Z]+)\.htm$
flights-result.php?id=$1&country=$2&place=$3 [L]
Then near the start of the flights-results.php file you should load the data for the id, then check that the provided "country" and "place" are correct (to stop people just entering anything here), and return a 4040 if it's not.
Remember to change all the links your app outputs to the new style as well.
You could also, as you mentioned, hard code all these URLs into a htaccess, but that's not ideal :)

Categories