删除友好 URL 的 .php 扩展名(明确编写)[关闭]

Posted

技术标签:

【中文标题】删除友好 URL 的 .php 扩展名(明确编写)[关闭]【英文标题】:Remove .php extension (explicitly written) for friendly URL [closed] 【发布时间】:2012-04-06 22:50:40 【问题描述】:

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 仍然友好。

但如果我写这个网址:

www.mysite.com/home.php

提供了home.php,网址不友好。

如何避免这种行为?我希望如果用户写 www.mysite.com/home.php,则 URL 栏中显示的 URL 是 www.mysite.com/home

【问题讨论】:

【参考方案1】:

代码

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]

【讨论】:

花了几个小时尝试了这么多解决方案,您的解决方案很有效,并且得到了很好的评价。谢谢!【参考方案2】:

你可以像这样从请求中删除 .php

RewriteCond %REQUEST_URI ^/(.*).php$
RewriteRule ^(.*)$ %1 [L,QSA]

【讨论】:

这部分问题有效。我的主要问题是,如果用户引入 mysite.com/file.php,我希望将 URL 重写为 mysite.com/file 是的,上面会将mysite.com/file.php 重定向到mysite.com/file - 然后注意无限循环 - ***.com/questions/7823801/… 谢谢@scibuff。但是是否可以更改浏览器的 URL?我仍然无法修改它。 使用[L,R=301] 而不是[L,QSA] 啊!现在我得到了310 error: ERR_TOO_MANY_REDIRECTS 我已经评论了这一行#RewriteCond %SCRIPT_FILENAME !-f 并将QSA 更改为R=301 这很难让它工作吗?我认为我将不得不使用@Artjom Kurapov 提供的解决方案【参考方案3】:

您也可以将此代码放入您的 .htaccess 文件中:

options +multiviews

这样做是在当前目录中搜索可用的扩展名(我认为是 .html、.htm 和 .php)。因此,例如,如果您请求 /user,它将寻找 user.php

【讨论】:

你的答案绝对是他想要的最好的答案:) 嗯,也许不是。如果我把/user,那么一切都好,它重定向到/user.php。但是如果我放/user.php,我希望浏览器的URL也更改为/user,这就是我想要做的。 您可以添加htaccess 规则将所有*.php 重定向到*,如下所示:rewriterule ^(.*)\.php$ $1 [r=301,l]。 (我目前无法对其进行测试,但它应该可以工作)。【参考方案4】:

您的重写将被忽略,因为它会根据您的规则检查现有文件:

RewriteCond %SCRIPT_FILENAME !-f

我建议在 php 中添加一个 URL 检查以重定向到自身(不带扩展名)。或者如果有人访问现有文件,您是否想显示 404 错误?

【讨论】:

如果我去掉那个 RewriteCond 会有什么影响?我看不出有什么区别。有没有正确的方法来使用 .htaccess,而不是在 php 中重定向? 它会将所有流量路由到您的文件.. 但由于我怀疑您是否会有类似 home.php.php 的内容,因此会导致 404。好吧 apache 不能对浏览器说将导航中的 URL 更改为更清晰的内容。 Mod rewrite 只是将一个 URL 请求转换为其他请求.. 所以你必须说明你想要什么逻辑 - 重定向或仍然提供页面.. 或 404

以上是关于删除友好 URL 的 .php 扩展名(明确编写)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 将字符串转换为孟加拉语语言类型的 SEO 友好 URL

htaccess - 从 url 中删除 .php 扩展名

如何从主页中删除 index.php 并从其他 php 文件中删除 .php 扩展名

如果 url 扩展名为 .php,则 htaccess 重写将其删除

ASP.NET 友好 URL

正则表达式 - 对 URL 友好的任何文本