Динамический чистый 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.php
TO: 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
,