.htaccess 用重写规则重构网页

.htaccess 用重写规则重构网页,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在尝试重新组织我的网页,这样,我就不用为每个页面设置40个文件,而是使用一个通过重写规则重定向的文件。 在我的目录中,我有如下文件: 1.php 2.php 3.php 关于.php help.php 我试图实现的是,如果文件存在,只需像普通一样交付它(about.php,help.php)。如果它已经不存在了,那么抓取页面并动态加载它 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d Rewrit

我正在尝试重新组织我的网页,这样,我就不用为每个页面设置40个文件,而是使用一个通过重写规则重定向的文件。 在我的目录中,我有如下文件:

1.php

2.php

3.php

关于.php

help.php

我试图实现的是,如果文件存在,只需像普通一样交付它(about.php,help.php)。如果它已经不存在了,那么抓取页面并动态加载它

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /page.php?link=$1 [L]
然后在page.php上,我有:

include($_SERVER['DOCUMENT_ROOT'].'/files/'.$_GET['link'].'.php');
我遇到的问题是,它正在拉动一切。这将导致错误:

include(): Failed opening 'C:/xampp/htdocs/files/1.php.php'
因为它的末尾有double.php。我可以在那里修改文件,但是我所有的新链接都会被破坏,因为它们不再使用扩展名了。
当然,这不可能是“全部扩展名”或“没有扩展名”的情况吗?

为什么不检查
$\u GET['link']
是否包含一个
文件,您知道它是一个扩展名为的文件,然后在此基础上分解,只使用第一部分。否则按原样使用

if (strpos($_GET['link'], ".") !== false) {
    $parts = explode(".",$_GET['link']);
    $link = $parts[0];
}else{
    $link = $_GET['link'];
}

include($_SERVER['DOCUMENT_ROOT'].'/files/'.$link.'.php');