我想在php中创建一个友好的URL

时间:2014-10-16 12:11:03

标签: php

我想为我的网站创建一个友好的网址,这是我的代码。

这段代码的问题是,当我点击关于我们的链接时,网址变为localhost / php_friendly_url / about / 12它正确但当我点击主链接时,网址变得像这样localhost / php_friendly_url / about / main你能帮我吗纠正我的代码

请帮我解决我的问题。

main.php

    <html>
      <body>
         <h1>Main Page</h1>
         <ul>
             <li><a href="main">Main</a></li>
             <li><a href="about/12">About US</a></li>
         </ul>
      </body>
    </html>

的index.php

<?php
   include 'class/friendlyUrl.php'; 
   $url = new friendlyUrl('/php_friendly_url');

   if(!$url->segment(1))
       $page = 'main';
   else
       $page = $url->segment(1);

   switch($page) {    
   case 'main':

      include 'main.php';
      break;

   case 'about':

      include 'about.php';
      break;

   default:   
    echo '404 not found';
    break;
  } 
?>

friendlyUrl.php

<?php

    class {     
        var $site_path;         
        function __construct($site_path){           
            $this->site_path = $this->removeSlash($site_path);          
        }       

        function __toString(){          
            return $this->site_path;            
        }

        private function removeSlash($string){          
            if( $string[strlen($string) - 1 ] == '/' )              
                $string = rtrim($string, '/');  
                return $string;         
        }

        function segment($segment){         
            $url = str_replace($this->site_path, '', $_SERVER['REQUEST_URI']);
            $url = explode('/', $url);              

            if( isset($url[$segment]) ){                
                return $url[$segment];              
            }
            else                    
                return false;

            return $url;            
        }   
    }
?>

的.htaccess

<IfModule mod_rewrite.c>
   RewriteEngine On 

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule ^(.*)$ index.php/$1
</IfModule>

2 个答案:

答案 0 :(得分:2)

你所要做的就是写&#34; /&#34;在您的网址开头,如:

<ul>
    <li><a href="/main">Main</a></li>
    <li><a href="/about/12">About US</a></li>
</ul>

没有&#34;特别&#34;需要PHP代码;)

如果您的网站不在根文件夹中,但可以在&#34; test&#34;子文件夹,然后我通常做的是在某些&#34; config&#34;中创建常量。文件(包含在所有文件中),如:

define( 'URL', 'http://mywebdomain.com/test' );

然后在所有链接中使用此常量:

<ul>
    <li><a href="<?php echo URL ?>/main">Main</a></li>
    <li><a href="<?php echo URL ?>/about/12">About US</a></li>
</ul>

答案 1 :(得分:0)

在codeigniter中,它具有相同的链接样式,我通过添加所有链接来解决这个问题。

<html>
  <body>
     <h1>Main Page</h1>
     <ul>
         <li><a href="<?php echo base_url(); ?>main">Main</a></li>
         <li><a href="<?php echo base_url(); ?>about/12">About US</a></li>
     </ul>
  </body>
</html>

虽然base_url()来自codeigniter,而不是来自PHP,你可以创建类似你自己的东西。

编辑:

制作base_url()的最简单方法是使用一个常量,根据环境手动更新:

function base_url(){
  return "http://localhost/";
}

有许多更先进的自我检测解决方案,我建议你使用谷歌找到一个适当的,如果上述不适合你的需要。