更改php动态页面网址

时间:2018-02-07 09:13:04

标签: php html web

我刚开始学习php,我创建了一个简单的php网站,其中包含帖子,用户。我发帖子链接看起来像:http://localhost/?post=3 我的问题是有没有办法使网址看起来像http://localhost/post/252155不同,而不为它创建PHP页面。

这是我的代码段

$results = mysqli_query($conn, "SELECT * FROM projects");
$project = array();
if (mysqli_num_rows($results) > 0) {
    while($row = mysqli_fetch_assoc($results)){
        $project[] = $row;
    }
}

$projects = 0;
$maxprojects = 14;
while ($projects < $maxprojects) {
    $projectId = $project[$projects]["project_id"];
    $projectURL = "../basic/?project=".$projectId ;
    $projectTitle = $project[$projects]["project_title"];
    $projectThumb = $project[$projects]["project_thumbnail"];
    $projectPrice = $project[$projects]["project_price"];
    echo "
        <li class='gig'>
            <div class='gig-content'>
                <span class='thumbnail'>
                    <a href='$projectURL'><img src='".$projectThumb."'></a>
                </span><!-- Gig Thumbnail -->
                <span class='title'>
                    <h2><a href='$projectURL'>".$projectTitle."</a></h2>
                </span><!-- Gig Title -->
                <div class='meta'>
                    <span class='price'>
                        <h1>".$projectPrice."$</h1>
                        <h4>Startin at</h4>
                    </span><!-- price -->
                </div>
            </div>
        </li><!-- Gig -->
    ";
    ++$projects;
}

提前感谢!

2 个答案:

答案 0 :(得分:2)

要完成此任务,您需要先创建一个名为&#34; .htaccess&#34;的文本文档。包含你的规则。必须准确地命名(不是&#34; .htaccess.txt&#34;或&#34; rules.htaccess&#34;)。那里可能已经存在.htaccess文件,在这种情况下你应该编辑它而不是覆盖它。

RewriteEngine On 
RewriteRule    ^post/([0-9]+)/?$    ?post=$1    [NC,L]

注意:仅当Application在Apache上运行

答案 1 :(得分:0)

一种常见的方法是让Web服务器将所有URL请求路由到任意(只要在该位置不存在实际资源 - 文件)。使用Apache Web服务器,您可以使用create .htaccess将没有文件或目录的所有URL路由到index.php文件。例如,在面向公众的目录的根目录中,其.htaccess可以包含

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

这会将所有不存在的URL作为文件或目录路由到网站根目录中的index.php。 (这是WordPress的方式)。

然后,在index.php内,您可以解析网址并根据网址提供您希望的任何内容(或不提供)。您可以在PHP代码中创建自己的路由系统,以将内容生成指向您喜欢的任何PHP页面。

<?php
print_r($_SERVER['REQUEST_URI']);

例如,https://yourdomain.com/post/13452345会输出/post/13452345

%_SERVER['QUERY_STRING']parse_url()也可能有用。并且可能还提供与安装/配置相关的值:$_SERVER['SCRIPT_URI']$_SERVER['SCRIPT_URL']

可以在PHP参考站点Predefined Variables, $_SERVER

找到更多信息

您可以根据需要解析URI:

$URI_COMPONENTS = explode( '/', $_SERVER['REQUEST_URI'] );
if ($(URI_COMPONENTS[0] == 'post') {
    // get $(URI_COMPONENTS[1])
    // output response based on post value
    // Maybe something like put_post_content($(URI_COMPONENTS[1]));
}
else
{
   http_response_code(404); // Not a "post" request, so invalie URL
}