【问题标题】:How to remove .php extension only for pages under a sub directory?如何仅删除子目录下页面的 .php 扩展名?
【发布时间】:2019-10-11 14:30:20
【问题描述】:

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

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

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

我在 .htaccess 中尝试了以下规则(放在根目录下),但它仍然显示 .php

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

【问题讨论】:

    标签: php apache url-rewriting


    【解决方案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 框架中的工作方式以获得更好的解决方案,或使用其中之一。

    【讨论】:

    • 感谢您的建议,实际上是的,我同意您的观点,使用 laravel 或 php 框架时,这会变得不那么痛苦。但这是一个旧的自定义 php 网站,我们不想弄乱所有 url 以防止伤害 SEO。所以我不得不通过htaccess来完成
    • 那么,你仍然可以构建一个路由器 XD。不是最好的,因为这个网站的架构,但无论如何。这有助于删除这些扩展。
    【解决方案2】:

    我想通了 我只需要在“/guide/”目录下创建 .htaccess 文件。使用以下规则注释RewriteBase /guide/ 确保它只删除“/blog/”文件夹下的.php

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

    【讨论】:

      【解决方案3】:

      试试这个——

      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]
      

      【讨论】:

        【解决方案4】:

        试试这个

        DirectorySlash Off
        Options -MultiViews -Indexes
        RewriteEngine On
        
        RewriteCond %{REQUEST_FILENAME}.php -f
        RewriteRule ^(.+?)/?$ $1.php [L]
        
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]
        

        【讨论】:

          猜你喜欢
          • 2022-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-16
          • 1970-01-01
          • 2021-02-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多