删除友好URL的.php扩展名(显式编写)
htaccess删除我的站点文件的.php扩展名删除友好URL的.php扩展名(显式编写),php,.htaccess,mod-rewrite,friendly-url,Php,.htaccess,Mod Rewrite,Friendly Url,htaccess删除我的站点文件的.php扩展名 RewriteEngine on RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L,QSA] 现在,如果我去我的网站 www.mysite.com/home 工作正常,它重定向到home.php,但URL仍然友好 但是如果我写这个URL: www.mysite.com/
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [L,QSA]
现在,如果我去我的网站
www.mysite.com/home
工作正常,它重定向到home.php,但URL仍然友好
但是如果我写这个URL:
www.mysite.com/home.php
提供home.php,URL不友好
我怎样才能避免这种行为?我希望如果用户写入www.mysite.com/home.php,则URL栏中显示的URL为www.mysite.com/home您的重写将被忽略,因为它会根据您的规则检查现有文件:
RewriteCond %{SCRIPT_FILENAME} !-f
我建议在php中添加URL检查以重定向到自身(无扩展)。或者,如果有人访问现有文件,您想显示404错误吗?您可以从这样的请求中删除.php
RewriteCond %{REQUEST_URI} ^/(.*).php$
RewriteRule ^(.*)$ %1 [L,QSA]
您还可以将此代码放入
.htaccess
文件中:
options +multiviews
这样做的目的是在当前目录中搜索可用的扩展名(.html、.htm和.php)。因此,例如,如果您请求/user
,它将查找user.php
代码
RewriteEngine On
RewriteBase /
# remove enter code here.php; use THE_REQUEST to prevent infinite loops
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]
# remove index
RewriteRule (.*)/index$ $1/ [R=301]
# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
如果我删除重写,会有什么影响?我看不出有什么不同。有没有一种合适的方法来使用.htaccess而不是在php中重定向?它将把所有流量路由到您的文件。。但是,由于我怀疑您是否会有类似home.php.php的内容,它将导致404。apache不能要求浏览器将导航中的URL更改为更干净的内容。Mod rewrite只是将一个URL请求转换为其他URL请求。。因此,你必须说明你想要什么样的逻辑——重定向或仍然为页面服务。。或者这部分问题是有效的。我的主要问题是,如果用户介绍mysite.com/file.php,我希望URL被重写为mysite.com/fileyes,上述内容将重定向到
mysite.com/file.php
到mysite.com/file
,然后注意无限循环-谢谢@scibuff。但是有可能更改浏览器的URL吗?我仍然无法修改它。请使用[L,R=301]
而不是[L,QSA]
Argh!现在我得到了310错误:ERR_TOO_MANY_REDIRECTS
我已经注释了这行#RewriteCond%{SCRIPT_FILENAME}-f
并将QSA
更改为R=301
这是不是很难让它工作?我想我必须使用@Artjom Kurapovv提供的解决方案你的答案肯定是他想要的最好的:)哼,也许不是。如果我放置/user,那么一切都正常,它将重定向到/user.php。但是如果我放置/user.php,我希望浏览器的URL也更改为/user,这就是我正在尝试做的。您可以添加htaccess
规则来重定向所有*。php
到*
如下:重写规则^(.*)\.php$$1[r=301,l]
。(我目前无法测试它,但它应该可以工作)。花了几个小时尝试了这么多解决方案,你的解决方案很有效,并且得到了很好的评价。非常感谢。