清理网址

时间:2016-04-18 17:15:31

标签: php html

我目前有一个看起来与

相似的网址

组合/的index.php?页=家里

我的网站使用简单的PHP通过索引运行所有代码。为了使它工作,我的index.php看起来像这样。

<div id="wrapper">
    <?php 
        // INCLUDING HEADER ON ALL PAGES
        include("pages/header.php");
    ?>

    <main> <!-- MAIN TAG !-->
    <?php 
        $pageLoaded = array('home', 'header' , 'get-in-touch' , 'work' , 'main'); // LIST ALL PAGES

        $page = ( isset($_GET['page']) ) ? $_GET['page'] : 'home';

        if ( in_array($page, $pageLoaded) ){
            include("pages/$page.php");
        } 

        else {
            include("pages/404.php");
        }
    ?>
    </main>

    <?php 
        // INCLUDING FOOTER ON ALL PAGES
        include("pages/footer.php");
    ?>
</div>

然后我的标题链接执行此操作以正确加载页面:

<ul class="links">
    <li><a href="index.php?page=home">HOME</a></li>
    <li><a href="index.php?page=work">WORK</a></li>
    <li><a href="index.php?page=get-in-touch">ABOUT</a></li>
</ul>

无论如何,我可以编写我的PHP以返回更好看的URL吗?

而不是index.php?

我非常感谢任何清理我的代码的建议,因为我是PHP的新手。

2 个答案:

答案 0 :(得分:2)

在没有重写模块的情况下只使用PHP来回答,你可能只是简单地省略了索引页面,使用页面名称作为数组索引,并检查它是否已设置,但是您在网址中仍然有?

<div id="wrapper">
<?php 
    // INCLUDING HEADER ON ALL PAGES
    include("pages/header.php");
?>

<main> <!-- MAIN TAG !-->
<?php 
    $pageLoaded = array('home', 'header' , 'get-in-touch' , 'work' , 'main'); // LIST ALL PAGES

    $get_keys = array_keys($_GET); // find all the pages in url, in case of multiple
    $matches = array_intersect($pageLoaded,$get_keys); // find matches

    if(!empty($matches)) $page = $matches[0];
    else $page = 'home';

    if ( in_array($page, $pageLoaded) ){ // now redundant, may want to play with other ways of serving 404
        include("pages/$page.php");
    } 

    else {
        include("pages/404.php");
    }
?>
</main>

<?php 
    // INCLUDING FOOTER ON ALL PAGES
    include("pages/footer.php");
?>

现在您的标题链接可能如下所示:

<ul class="links">
  <li><a href="?home">HOME</a></li>
  <li><a href="?work">WORK</a></li>
  <li><a href="?get-in-touch">ABOUT</a></li>
</ul>

答案 1 :(得分:1)

将此代码放在你的index.php所在的.htaccess

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]

只是为了测试,在index.php中,尝试这样做,

<?php
  $page = ( isset($_GET['page']) ) ? $_GET['page'] : 'home';
  echo $page;
?>

并在你的page.php中

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <ul class="links">
    <li><a href="http://localhost/test/home">HOME</a></li>
    <li><a href="http://localhost/test/work">WORK</a></li>
    <li><a href="http://localhost/test/get-in-touch">ABOUT</a></li>
    </ul>
  </body>
</html>

这必须导致三,家庭,工作或触摸

希望这会有所帮助。