删除 .php 并添加/文件未加载后(未找到对象)

After removing .php and adding / file not loading (object not found)

我试图删除 .php 扩展名并添加一个 /,就像普通网站一样。示例 http://example.com/category/.

我使用 .htaccess 删除 .php。这是代码:

RewriteEngine On
RewriteBase /

# hide .php extension snippet
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L]

# add a trailing slash    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

这段代码完成了它的任务。它删除了 .php 并添加了 /,但 PHP 页面现在未加载。

这是截图(文件名test.php):

如何解决这个问题?

这是因为您缺少将 .php 静默添加到此类重定向 URI 的内部规则。

您可以在最后添加这条规则来解决这个问题:

RewriteEngine On
RewriteBase /

# hide .php extension snippet
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1/ [R=301,NE,L]

# add a trailing slash if needed
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/$ .php [L]

经过一些研究后,下面给出了在我的案例中实际起作用的结果。

删除 .php 扩展名并在 URL 末尾添加 /

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ .php
RewriteRule ^([^/]+)/([^/]+)/$ //.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ // [R=301,L]

输出:

参考:https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/