Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除友好URL的.php扩展名(显式编写)_Php_.htaccess_Mod Rewrite_Friendly Url - Fatal编程技术网

删除友好URL的.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/

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/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]
。(我目前无法测试它,但它应该可以工作)。花了几个小时尝试了这么多解决方案,你的解决方案很有效,并且得到了很好的评价。非常感谢。