我刚刚在ubuntu apache服务器上安装了mod_rewrite并启用了.htaccess。但是,当我编辑.htaccess从文件中删除.php文件扩展名时,URL不会更改。
现在,我的.htaccess文件如下所示:
Options -Indexes
ErrorDocument 400 /blabla.php
ErrorDocument 401 /blabla.php
ErrorDocument 403 /blabla.php
ErrorDocument 404 /blabla.php
ErrorDocument 500 /blabla.php
不多,只是确保ppl无法查看我的文件树并添加了一些自定义错误页面。
但是,如果我在自己的网站上输入页面,例如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”,该URL仍显示为“ www.mysite.com/page.php”,而不是“ www.mysite.com/page”
我还需要将href从href =“ page.php”更改为href =“ page”吗?为了使.php扩展名消失。-因为即使我不首先编辑.htaccess文件,该命令也可以正常工作。
而且,在编辑.htaccess文件时,请务必确保重新启动apache。
预先感谢,K
您在这里问了很多问题。让我回答第一个:
www.mysite.com/page
由于的缘故,没有任何重写规则即可工作Options MultiViews
。OptionMultiViews
由Apache's content negotiation module
运行前的选项使用mod_rewrite
,并使Apache服务器匹配文件扩展名。因此/file
可以在URL中,但可以使用/file.php
。
如果将此行放在根.htaccess的顶部:
Options -MultiViews
然后www.mysite.com/page
将发出404。
另外,要自动.php
从URL中删除,请在根.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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句