从url中删除.php

时间:2014-09-29 09:50:25

标签: php .htaccess

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

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

我的服务器也启用了mod重写。  我有一个表单,其中包含./getReadings.php的操作。 但当我将其更改为./getReadings时,它表示tehre不是服务器上的此类文件。我的错是什么?

3 个答案:

答案 0 :(得分:3)

尝试在Options -MultiViews指令

之前添加RewriteEngine
Options -MultiViews
RewriteEngine On

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

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


编辑:此时,您可以通过2个不同的网址(包含或不包含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]

答案 1 :(得分:0)

    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

答案 2 :(得分:0)

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