【问题标题】:Removing .php from url [duplicate]从 url 中删除 .php [重复]
【发布时间】:2014-09-29 09:50:24
【问题描述】:

嗯,我知道应该由 .htaccess 来完成 我的 .htaccess 位于我网站的根目录中,这是它的内容

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

在我的服务器上也启用了 mod 重写。 我有一个表格,里面有对./getReadings.php 的操作。 但是当我将其更改为./getReadings 时,它说 tehre 不是服务器上的此类文件。我的错误是什么?

【问题讨论】:

  • 尝试在RewriteEngine指令之前添加Options -MultiViews
  • 完美,伙计!发布答案

标签: php .htaccess


【解决方案1】:

尝试在RewriteEngine 指令之前添加Options -MultiViews

Options -MultiViews
RewriteEngine On

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

注意:MultiViews 是关于 Apache 内容协商的(这是这里的问题,因为filename 将自动翻译为filename.php 现有文件)。这就是为什么你必须禁用它。


编辑:现在,您可以通过 2 个不同的 url 访问相同的内容(有或没有 php 扩展名)。为避免重复内容(这对搜索引擎不利),您可以使用此代码将扩展重定向到无扩展等效项

Options -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/(.+?)\.php [NC]
RewriteRule . /%1 [R=301,L]

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

【讨论】:

    【解决方案2】:
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
    

    【讨论】:

      【解决方案3】:
          RewriteEngine on 
          RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
          RewriteRule ^ %1 [R,L]
      
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME}\.php -f
          RewriteRule ^(.*)$ $1.php
      

      【讨论】:

      • 请避免只发布代码。您还应该添加对代码在做什么的解释。
      猜你喜欢
      • 2021-04-25
      • 2014-09-18
      • 2023-02-02
      • 2019-11-02
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2020-01-20
      相关资源
      最近更新 更多