如何只删除子目录下页面的.php扩展名?

时间:2019-05-25 05:14:59

标签: php apache url-rewriting

我正在尝试仅删除网站的子类别文件夹下的页面的.php扩展名。

currently: example.com/blog/my-first-blog.php

what i want: example.com/blog/my-first-blog/

我尝试在.htaccess中放置以下规则(放置在root中),但仍显示.php

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

3 个答案:

答案 0 :(得分:1)

获得所需结果的最佳方法是构建路由。 首先,您需要将所有流量重写为index.php:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

然后,您需要编写将解析URL路径的路由器。 路由器的最简单示例是:

$url = urldecode(preg_replace('/\\?(.*)$/', '', $_SERVER['REQUEST_URI']));

if ($url == '/contact/about') {
    include 'contact.php';
}

您可以检查它在PHP框架中如何工作,以获得更好的解决方案,或者使用其中一种。

答案 1 :(得分:1)

尝试一下-

RewriteEngine on
RewriteBase /
RewriteCond %{http://www.example.in/} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.php $ http://www.example.in/$1 [R=301,L]

答案 2 :(得分:0)

我知道了 我只需要在“ / guide /”目录下创建.htaccess文件。并附有以下规则注释RewriteBase /guide/,以确保其仅删除“ / blog /”文件夹下的.php

RewriteEngine On 
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]