PHP重写URL以删除.php扩展名

时间:2019-10-16 19:48:38

标签: php .htaccess

我正在一个项目中,我决定从我的应用程序的URL中删除.php扩展名。我成功使用下面给出的htaccess代码。但是问题是,如果手动键入或从历史记录中加载,页面仍将使用.php扩展名加载。

我当前的.htaccess代码。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

我希望它始终加载www.example.com/dashboard之外的www.example.com/dashboard.php,即使手动键入dashboard.php。

更新的.htaccess代码

RewriteEngine On
RewriteBase /dateapp/
RewriteRule ^([^\.]+).php$ $1 [R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,END]

2 个答案:

答案 0 :(得分:1)

您可以将重定向添加为第一条规则。

RewriteEngine On
RewriteRule ^([^\.]+).php$ /$1 [R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,END]

您必须使用END标志而不是L,否则重定向将以无限循环结束。如果.htaccess位于您的webroot文件夹中,则将起作用。

如果您在“文件夹”子文件夹中有.htaccess,则必须添加RewriteBase

RewriteEngine On
RewriteBase /folder/
RewriteRule ^([^\.]+).php$ $1 [R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,END]

答案 1 :(得分:0)

您可以在dateapp/.htaccess中使用此代码:

RewriteEngine On
RewriteBase /dateapp/

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

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