lovephp Posted June 24, 2016 Share Posted June 24, 2016 (edited) friends so i created seo friendly blog works ok but i face a issue which is say i in menu put links like index.php | contact.php all these works find but in my article.php it don't work if i do not add full url like say http://localhost/blog/index.php hope you get what im trying to say? here is my article.php page $url = $_SERVER['REQUEST_URI']; $url = str_replace('/blog/', '', ucwords($url)); //$sql=mysql_query("SELECT id,title,keyword,description,image,youtube,article,created,views FROM article WHERE url='".$url1."'"); $stmt = $db->prepare("SELECT id,title,keyword,description,image,youtube,article,created,views FROM article WHERE url = :url"); $stmt->bindParam(':url', $url, PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(); $count = $stmt->rowCount(); //$count = mysql_num_rows($sql); if($count <1){ header("Location: ".$site_path."index.php"); exit(); } $qry = "UPDATE article SET views = views +1 WHERE url = :url"; $stm = $db->prepare($qry); $stm->bindParam(':url', $url, PDO::PARAM_STR); $stm->execute(); //mysql_query("UPDATE article SET views = views +1 WHERE url ='".$url."'"); //$row=mysql_fetch_array($sql); and my htaccess RewriteEngine On RewriteBase /blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\?*$ article.php?$1 [L,QSA] how do i like every other page use links like index.php etc without having to use http://localhost/blog/index.php in my article.php page please someone. Edited June 24, 2016 by lovephp Quote Link to comment Share on other sites More sharing options...
lovephp Posted June 24, 2016 Author Share Posted June 24, 2016 anyone to the rescue? Quote Link to comment Share on other sites More sharing options...
QuickOldCar Posted June 27, 2016 Share Posted June 27, 2016 One thing I notice is you are saving full youtube urls in a database? Just save the video id. I have a pile of functions for extracting just the id all varieties of youtube urls. If need something for that, PM me. Now for the code... Are you upper casing the words in the url and then looking to replace a lower cased /blog/ with nothing? $url = str_replace('/blog/', '', ucwords($url)); There is a case insentitive version of that. str_ireplace() For the rewrite, if don't want to view the directory /blog/ in the url then replace it something like this rule. RewriteCond %{THE_REQUEST} ^GET\ /blog/ RewriteRule ^blog/(.*) /$1 [L,R=301] Quote Link to comment Share on other sites More sharing options...
lovephp Posted June 28, 2016 Author Share Posted June 28, 2016 One thing I notice is you are saving full youtube urls in a database? Just save the video id. I have a pile of functions for extracting just the id all varieties of youtube urls. If need something for that, PM me. Now for the code... Are you upper casing the words in the url and then looking to replace a lower cased /blog/ with nothing? $url = str_replace('/blog/', '', ucwords($url)); There is a case insentitive version of that. str_ireplace() For the rewrite, if don't want to view the directory /blog/ in the url then replace it something like this rule. RewriteCond %{THE_REQUEST} ^GET\ /blog/ RewriteRule ^blog/(.*) /$1 [L,R=301] i get your point bro but ill once again try to explain this. all seems to be working ok but its the relative links on the particular article.php which is <?php $url = $_SERVER['REQUEST_URI']; $url = str_replace('/blog/', '', ucwords($url)); $stmt = $db->prepare("SELECT id,title,keyword,description,image,youtube,article,created,views FROM article WHERE url = :url"); $stmt->bindParam(':url', $url, PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(); $count = $stmt->rowCount(); if($count <1){ header("Location: ".$site_path."index.php"); exit(); } $qry = "UPDATE article SET views = views +1 WHERE url = :url"; $stm = $db->prepare($qry); $stm->bindParam(':url', $url, PDO::PARAM_STR); $stm->execute(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <?php echo "<a href="index.php">Home</a>"; echo "<a href="somepage.php">Home</a>"; ?> <body> </body> </html> if you see in the body i added some links in relative manner and what happens is that those links becomes like http://localhost/blog/article/10/index.php now the article/10 is something i store in db as whole along with the url for the topic like article/10/this-is-some-topic-for-post now why on earth and from where the article/10/ gets added every relative links i cannot figure out but if i add absolute links like http://localhost/blog/index.php then all seems ok Quote Link to comment Share on other sites More sharing options...
DavidAM Posted June 28, 2016 Share Posted June 28, 2016 The user's browser (all browsers) need an absolute url to request something from the Internet. When the browser gets a relative url, it uses the current page to determine the absolute url for the request. Since you are doing rewrites on the server side the browser thinks the current url is www.yourdomain/article/10/this-is-something, so it drops the "this-is-something" (because that's the "file" name) and keeps the rest as the "directory" name; then tacks the relative url on the end - so it has www.yourdomain/article/10/index.php. In short, change the relative urls, to absolute urls. You don't have to include the domain, just put a slash at the front: /index.php since that goes to the document root for the current domain. Quote Link to comment Share on other sites More sharing options...
lovephp Posted June 28, 2016 Author Share Posted June 28, 2016 The user's browser (all browsers) need an absolute url to request something from the Internet. When the browser gets a relative url, it uses the current page to determine the absolute url for the request. Since you are doing rewrites on the server side the browser thinks the current url is www.yourdomain/article/10/this-is-something, so it drops the "this-is-something" (because that's the "file" name) and keeps the rest as the "directory" name; then tacks the relative url on the end - so it has www.yourdomain/article/10/index.php. In short, change the relative urls, to absolute urls. You don't have to include the domain, just put a slash at the front: /index.php since that goes to the document root for the current domain. It was that simple? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.