删除 .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/
我试图删除 .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/