.htaccess 如果用户在浏览器上输入.php,请删除URL中的.php

.htaccess 如果用户在浏览器上输入.php,请删除URL中的.php,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我已经通过配置.htaccess文件成功地删除了.php文件扩展名,这里的问题是,当用户在URL上键入.php时,我希望用户在URL上键入.php时被重定向。例如,我的原始URL是 http://mysite.com/home 有时,用户会这样键入 http://mysite.com/home.php,所以在本例中,我想将它们重定向到不带.php的url,所以应该是http://mysite.com/home 另一个例子是,如果URL有一个参数,例如: http://mysite.com/ho

我已经通过配置.htaccess文件成功地删除了.php文件扩展名,这里的问题是,当用户在URL上键入.php时,我希望用户在URL上键入.php时被重定向。例如,我的原始URL是

http://mysite.com/home
有时,用户会这样键入
http://mysite.com/home.php
,所以在本例中,我想将它们重定向到不带.php的url,所以应该是
http://mysite.com/home

另一个例子是,如果URL有一个参数,例如:

http://mysite.com/home.php?id=1&uid=100
我希望将用户重定向到
http://mysite.com/home?id=1&uid=100

有什么办法吗?
您的帮助将得到极大的感谢和回报!谢谢:)

使用
.htaccess
。以下是我目前在网站上使用的一些代码,它们将
/page.php
替换为
/page/

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^(.*)\/$ $1.php [NC]
将其放入名为
.htaccess
的文件中-没有名称,本例中的“扩展名”是文件本身。保存并上传到您的
public\u html
文件夹中的服务器。或者无论您的基本/公共目录是什么


代码的最后一行帮助您,它将以
.php
文件结尾的任何文件替换为结尾处带有
/
的文件,如上所述。第2行和第3行转发<代码>http://domain.com至
http://www.domain.com
。我不知道您的情况,但我认为这样看起来更好。

您需要匹配实际请求,而不是URI,因为您的其他规则正在重写URI。比如说:

RewriteCond %{THE_REQUEST} \ /(.+)\.php(\?|\ |$)
RewriteRule ^ /%1 [L,R=301]
因此,如果有人键入:
http://mysite.com/some/path/home.php
,浏览器将被重定向(从而更改地址栏中的URL)到
http://mysite.com/some/path/home

如果只想对文档根目录中的php文件执行此操作(例如
/home.php
not
/some/path/to/home.php
),则调整正则表达式:

RewriteCond %{THE_REQUEST} \ /([^/]+)\.php(\?|\ |$)
RewriteRule ^ /%1 [L,R=301]

在文件顶部尝试以下操作:

if (strpos($_SERVER['REQUEST_URI'],'.php')!==false){
$good_path = str_replace($_SERVER['REQUEST_URI'],'.php','');
header('Location: '.$good_path);
}

最好使用正则表达式来检查扩展名,但这只是一个简单的示例,仅用于入门。

如果用户在URL上键入.php,这会将用户重定向到非.php URL吗?如果他们键入
index.php
file.php
,它仍然会将他们指向
.php
文件。上面的代码没有将它们指向非
.php
文件,它是同一个文件,但URL不同。哦,我已经在当前的.htaccess配置中解决了这个问题,我想要的是重定向它们。无论如何,谢谢你的回答:)哦,它确实有效,但问题是如果url有一个参数,例如:,它就不起作用。你知道吗?:)@ElsonSolano是的,最后你需要一个
\?
。请参见编辑,请求匹配的结尾必须是
(\?\\\\\\$)
,才能包含可能的查询字符串。