.htaccess指向页面的php版本(如果存在)

时间:2013-12-20 14:38:04

标签: php regex apache .htaccess mod-rewrite

我一直在试图让这个工作起作用,但我无法做到。

我需要将所有html页面重定向到php页面,除扩展名外都有相同的名称,但仅当php版本存在时才会显示。

因此,如果页面是“products.html”,我需要它来检查“products.php”是否存在,如果存在,执行php版本(不重定向浏览器并显示products.php)如果不存在,渲染html版本

可以使用htaccess完成吗?如果是的话,你能帮我一个例子或者指点我到哪里可以找到这个例子吗?

旁注:我需要同时使用.html.htm页面。

我还尝试使用我在网上找到的AddType和AddHandler示例使html页面执行php代码,但它们都没有为我工作,所以这就是为什么我决定使用每个页面的php版本。

感谢。

3 个答案:

答案 0 :(得分:2)

将此代码放入DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)\.html?$ /$1.php [L]

答案 1 :(得分:-1)

您可以在index.php文件中将重写规则设置为index.php,检查文件是否存在并使用include($page);

提供服务
$file = $_GET['page'];

if (file_exists($file)) {
    include($file);
} else {
    // 404 page...
}

答案 2 :(得分:-2)

您的答案在此解决:htaccess rewrite if redirected file exists

解决方案是您重写的条件。它可以放在根文件夹的.htaccess中,也可以放在您想要此功能的文件夹中。

RewriteCond %{REQUEST_FILENAME} (.*)\.html?$
RewriteCond %1\.php -f
RewriteRule ^(.*)\.html?$ $1.php [P,L]

与答案的唯一区别是P,因为我已将您的请求设为内部重定向,以向用户显示旧网址。另外,我使用HTML?获取htm和html文件。

https://httpd.apache.org/docs/current/mod/mod_rewrite.html

对此进行了描述