试图删除.php文件扩展名

时间:2014-07-28 12:49:03

标签: php apache .htaccess mod-rewrite ubuntu

我刚刚在我的ubuntu apache服务器上安装了mod_rewrite并启用了.htaccess。 但是当我编辑.htaccess以从文件中删除.php文件扩展名时,网址不会改变。

现在我的.htaccess文件看起来像这样:

Options -Indexes

ErrorDocument 400 /blabla.php
ErrorDocument 401 /blabla.php
ErrorDocument 403 /blabla.php
ErrorDocument 404 /blabla.php
ErrorDocument 500 /blabla.php

并不多,只是确保ppl无法查看我的filetree并添加了一些自定义错误页面。

但是如果我在我的网站上输入一个页面,例如href =" page.php"一切正常,但如果我删除" .php"从网址栏中重新加载页面为" www.mysite.com/page"没有.php它仍然有效。我没有在.htaccess文件中做过任何事情,这是对的吗?

如果我现在将以下行添加到.htaccess:

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

然后访问 href =" page.php" 该网址仍显示为" www.mysite.com/page.php" 而不是" www.mysite.com/page"

我是否还需要将href从 href =" page.php" 更改为 href =" page" ?为了使.php扩展名消失。 - 因为即使我不首先编辑.htaccess文件也能正常工作。

当我编辑.htaccess文件时,我总是确保重启apache。

提前致谢,K

3 个答案:

答案 0 :(得分:3)

你在这里问了很多问题。让我先回答一下:

由于www.mysite.com/page

Options MultiViews无需任何重写规则。在MultiViews之前运行的Apache's content negotiation module使用选项mod_rewrite,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php

如果您将此行放在根目录的顶部.htaccess:

Options -MultiViews

然后www.mysite.com/page将发出404。

同样要从您的网址中自动删除.php,请在根目录中使用此代码.htaccess:

Options -MultiViews
RewriteEngine On

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

答案 1 :(得分:0)

  1. 如果page自动呈现page.php您已启用Content Negotiation,则最有可能MultiViews级别httpd.conf
  2. 是的,您必须链接到您希望在地址栏中显示的内容。

答案 2 :(得分:0)

试试这个。

RewriteRule (.*)\ $1.php