我刚刚在我的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
答案 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)
page
自动呈现page.php
您已启用Content Negotiation,则最有可能MultiViews
级别httpd.conf
。答案 2 :(得分:0)
试试这个。
RewriteRule (.*)\ $1.php