Динамический чистый URL.htaccess

Я долго искал, как сделать чистые URL, но я не могу найти ответ на свою проблему.

Это моя настройка PHP в index.php:

<?php
    $page = $_GET["page"];

    if(file_exists("pages/{$page}.php")) {
        include ("pages/{$page}.php");
    } else if (empty($page)) {
        include ("pages/Home.php");
    } else {
        echo "This page do not exist";
    }
?>

И это мой HTML:

<ul>
    <li>
        <a href="Home">Home</a> <!-- Regular navigation link for: Home, About, Contact -->
    </li><li>
        <a href="Project/2">Project</a> <!-- The link I press to see a project -->
    </li>
</ul>

Это мое .htaccess:

RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d

RewriteRule ^(.*)$ index.php?page=$1
#RewriteRule ^(.*)/(.*)$ index.php?page=$1&id=$2

Options -Indexes

он отлично переписывает мой URL ОТ: domain.com/index.php?page=Home.phpTO: domain.com/Home,

Два правила перезаписи работают отлично, но не вместе. Как я могу заставить этих двоих работать друг с другом?

2 ответа

.Htaccess уничтожает значения $_GET, попробуйте вместо этого:

<?php

# From the URI, get whatever is after the last slash:
$subject = $_SERVER['REQUEST_URI'];
$pattern = '/.*\/(.*)$/';
preg_match($pattern, $subject, $matches);
$page = $matches[1];

if(file_exists("pages/{$page}.php")) {
    include ("pages/{$page}.php");
} else if (empty($page)) {
    include ("pages/Home.php");
} else {
    echo "This page do not exist";
}
?>

Попробуйте следующее:

RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d

RewriteRule ^(.*)/(.*)$ index.php?page=$1&id=$2
RewriteRule ^(.*)$ index.php?page=$1

Options -Indexes

И еще одна вещь, вы должны использовать $_GET вместо _GET,

Другие вопросы по тегам