嗯,我知道它应该由.htaccess完成 我的.htaccess位于我网站的根目录中,这里是内容
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
我的服务器也启用了mod重写。
我有一个表单,其中包含./getReadings.php
的操作。
但当我将其更改为./getReadings
时,它表示tehre不是服务器上的此类文件。我的错是什么?
答案 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