我想为我的网站创建一个友好的网址,这是我的代码。
这段代码的问题是,当我点击关于我们的链接时,网址变为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>
答案 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/";
}
有许多更先进的自我检测解决方案,我建议你使用谷歌找到一个适当的,如果上述不适合你的需要。