htaccess PHP没有扩展名,但URL无法显示扩展选项

时间:2018-05-07 19:59:58

标签: php .htaccess

有很多关于“删除PHP扩展”的帖子。我试过一堆。有些工作......有些不做......但没有人能做我需要的工作。 [注意:这被标记为“重复”......但没有人可以在这里为我提供解决方案的链接]

下面的代码允许我的用户转到某个页面,并在没有php扩展名的情况下查看它。但是,我需要将用户从带有扩展名的URL重定向到无扩展名的URL ...现在,转到“page.php”可以让他们将URL视为www.website.com/page.php (他们需要访问www.website.com/page)。

现在:

GO TO: www.website.com/page
--- URL IS: www.website.com/page   
GO TO: www.website.com/page.php
--- URL IS: www.website.com/page.php  
--- NEEDS TO BE : www.website.com/page

代码如下:

RewriteEngine on

# remove php ext
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

# http to https
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# Add www to any URLs that do not have them:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

有人说这是一个重复的帖子,解决方案是:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

那不起作用。它完全符合我的代码所做的。

找到以下工作......

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

1 个答案:

答案 0 :(得分:0)

  

但是,我需要将用户从带有扩展名的网址重定向到无扩展名网址

.htaccess方法

尝试一下:

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

(信用:How to remove .php, .html, .htm extensions with .htaccess

非.htaccess方法

如果你没有很多页面,另一种方法是PHP方式,只需要一个简单的header重定向......

换句话说,在页面顶部,只需执行类似 -

的操作
<?php
if(strpos(basename($_SERVER['PHP_SELF']), ".php") !== FALSE) {
    $fileName = explode(basename($_SERVER['PHP_SELF']));
    header('Location: '.$fileName[0]);
    die();
}
...
//rest of your page's code
...
?>

情景:

  • 用户转到:http://www.website.com/page

    • 没有任何事情发生...... if阻止未执行
  • 用户转到:http://www.website.com/page.php

      执行
    • if阻止,将用户重定向到http://www.website.com/page

如果您有一个包含在所有网页中的包含文件(例如header.php),那么在其中包含if块也会有效...