PHP / .htaccess:从url中删除php扩展

时间:2013-09-11 21:51:18

标签: php .htaccess mod-rewrite

我正在使用.htaccess代码删除所有网页的.php扩展名。这是我使用的代码:

RewriteEngine On
RewriteCond /%{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.php

它似乎不起作用。我想我错过了什么。当我输入www.mysite.com/about/来获取www.mysite.com/about.php时,它会返回错误404(找不到页面)。有人可以请一些亮点。

谢谢, 保罗G.

2 个答案:

答案 0 :(得分:4)

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# If folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
# and file exist
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
# uncomment the below rule if you want the "/" to be required 
# otherwise leave as is
# RewriteRule ^([^/]+)/$ $1.php [L]
# internally show the content of filename.php
RewriteRule ^([^/]+)/?$ $1.php [L]

上述规则将:

    如果文件夹存在,
  1. 将不会重定向
  2. 如果文件不存在,
  3. 将不会重定向
  4. 将重定向/之前的内容(如果存在文件名
  5. 因此它适用于所有这些例子:

    http://domain.com/about/
    http://domain.com/about
    http://domain.com/contact/
    http://domain.com/contact
    

    如果您愿意,可以删除?,例如注释规则,使其仅接受以/结尾的网址。

    http://domain.com/about/
    http://domain.com/contact/
    

    现在这些是上述工作的重要一步:

    1. 必须进入根文件夹中的.htaccess,例如/home/youraccount/public_html/.htaccess
    2. 重写规则之前的选项非常重要-MultiViews
    3. 该文件必须位于.htaccess所在的同一位置,例如about.php文件
    4. PHP显然必须正常工作。

答案 1 :(得分:0)

似乎规则末尾的斜线可能存在,或者可能不存在。添加?会使其成为可选项,以便mysite.com/aboutmysite.com/about/都匹配。

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-\s]+)/?$ /$1.php

很难说这是否是导致您的问题的原因,或者是否是其他原因。 mysite.com/about.php是否也会出错?