删除.htaccess中的.php扩展名,并已工作friendly-url RewriteRule

ki1q1bka  于 2023-06-24  发布在  PHP
关注(0)|答案(1)|浏览(126)

我尝试了这个网站上的数百个答案(来自其他用户的问题),但这些答案在我的情况下不起作用。
我的网站使用slugs来显示seo友好的url,这部分工作正常。但我也想有一些非动态链接/静态链接这样:
显示/链接example.com/contact.php,不带.php扩展名,例如example.com/contact
但似乎什么都不起作用,12个小时后,这个.htaccess快把我逼疯了。
以下是我到现在为止所做的

RewriteEngine On

#this is the part for see-friendly urls, this part is working
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-/.a-zA-Z0-9]+)$ en.php?slug=$1 [QSA,L] 

#this is the part to remove php extension, this part is NOT working
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

你知道吗?

编辑我正在链接用户,就像example.com/contact,但我得到错误404

mec1mxoz

mec1mxoz1#

需要记住的重要一点是,重写规则不会“显示一个漂亮的URL”,它会读取浏览器发送的URL,并决定如何处理它。考虑“从URL中删除.php”会让你陷入错误的思维框架。
你需要问的是,如果浏览器发送一个“/contact”的URL,服务器应该如何决定显示哪个页面--是“/en.php”吗?slug=contact”,还是“/contact.php”?
另一件要记住的事情是 * 文件中规则的顺序很重要 * -如果进入的URL与文件中的第一条规则匹配,服务器不会继续查找文件以寻找“更好”的匹配。(在本例中尤其如此,因为您的第一条规则具有代表“last”的标志“L”;如果不存在,则规则可能匹配 * 新 * URL,但它仍然不是 * 而不是 * 原始规则。)
因此,在这种情况下的解决方案是简单地更改文件中规则的顺序:* 首先 * 放置一个部分来检查是否有一个名为“contact.php”的PHP文件,然后 * 只有当规则不匹配 * 服务器才会到达说要使用“contact”作为slug的部分。

相关问题