php - 删除 URL .php 扩展名会出现 404 错误

标签 php html apache .htaccess url

我正在重写我的 url 以摆脱 .php 扩展(并且希望 get 变量也一样,因为我得到的所有帮助都很棒,但仍然无法工作。

这是我的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L] 

现在,当我使用这段代码时,它取出了 .php,但随后出现错误:

Not Found

The requested URL /index.php was not found on this server.

与此同时,如果我取出该代码,它可以正常工作,但具有 .php 扩展名

最佳答案

我在 .htaccess 中使用此代码删除 .php 扩展名并将 .php 扩展名页面重定向到非 .php 扩展页面:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteRule ^(wp-admin)($|/) - [L] # You don't want to mess with WordPress 
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.php -f
 RewriteRule .* $0.php

 # browser requests PHP
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
 RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

 # check to see if the request is for a PHP file:
 RewriteCond %{REQUEST_FILENAME}\.php -f
 RewriteRule ^/?(.*)$ /$1.php [L]
</IfModule>

以上代码在.htaccess中使用时,可以访问不带扩展名的PHP页面,用户访问带有.php 扩展名,他/她将被重定向到没有扩展名的页面。

示例:

http://example.com/page.php is redirected to http://example.com/page

http://example.com/page will be the same as http://example.com/page.php

在内部访问带有扩展名的PHP文件不会有任何问题:

<?
include("page.php");
?>

将毫无问题地工作。

关于php - 删除 URL .php 扩展名会出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964970/

相关文章:

php - 具有唯一名称的排行榜

php mysql - 在单个查询中获取多于1条记录

php - 复杂的 mysql 查询将对 2 个表的结果进行排序

javascript - 使用绝对后保存图像位置javascript

html - 控制高度并删除旋转 div 之间的空格

PHP 在 Windows 上发送邮件导致发送电子邮件后为 'hang'

php - 分离 php 和 html... 为什么?

php无法无错误上传大文件

apache - mod_rewrite 不适用于查询字符串重定向

linux - 在 httpd.conf 中保留 VirtualHost RewriteRule