Php .htaccess动态清除URL

Php .htaccess动态清除URL,php,html,.htaccess,mod-rewrite,Php,Html,.htaccess,Mod Rewrite,我一直在寻找很长一段时间,如何使干净的网址,但我似乎找不到一个答案,我的问题 这是我在index.PHP中的PHP设置: <?php $page = $_GET["page"]; if(file_exists("pages/{$page}.php")) { include ("pages/{$page}.php"); } else if (empty($page)) { include ("pages/Home.php");

我一直在寻找很长一段时间,如何使干净的网址,但我似乎找不到一个答案,我的问题

这是我在
index.PHP
中的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";
    }
?>
它完美地重写了我的URL 发件人:
domain.com/index.php?page=Home.php
至:
domain.com/Home

这两个重写规则完全分开工作,但不在一起。如何使这两种方法相互配合?

请尝试以下方法:

RewriteEngine On

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

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

Options -Indexes

还有一件事,您应该使用
$\u-GET
而不是
\u-GET
。htaccess正在销毁$\u-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";
}
?>


尝试更改规则的顺序。规则是从上到下处理的,这条规则:
(.*)
匹配所有内容,这就是为什么第二条规则根本不需要检查的原因。我认为,一旦它被重写,GET变量就不存在了,您应该从'REQUEST\u URI'标题中获取它,它似乎已经起作用,但现在它一直在向URL添加项目。每次我按下Project/2(带有项目id的项目页面的链接)时,它都会向其中添加项目,例如:单击Project/2:URL(domain.com/Project/2),单击Home(domain.com/Project/Home)。你知道怎么解决吗?我想你只需要在首页前面画一条斜线,像这样
,否则它是一个相对链接,会留在项目文件夹中
RewriteEngine On

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

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

Options -Indexes
<?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";
}
?>