如何在地址栏中删除文件扩展名?

时间:2015-11-17 03:56:19

标签: javascript php .htaccess

我正在使用以下代码从网址中删除.php扩展名:

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

我的问题是如何像堆栈溢出一样将其删除。如果我的网址为domain.com/about.php,则会将其重定向到domain.com/about,但如果有人在.php之后有意识地将其about保留在那里。此外,如果有人直接访问domain.com/about.php,它仍然存在。即使用户有意输入,我如何从stackoverflow中删除URL中的任何扩展名?如果无法在.htacess中完成此操作,我可以在JavaScript或PHP中完成吗?

2 个答案:

答案 0 :(得分:0)

尝试:

RewriteEngine on

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ %1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.php -f
 RewriteRule ^(.*)$ $1.php [NC,L]

这将重定向

http://example.com/file.php

http://example.com/file

然后重写:

http://example.com/file

http://example.com/file.php

答案 1 :(得分:0)

  

使用Apache Web Server时,Magic重写了干净的URL:

此过程包含几个步骤。你应该觉得自己是一个忍者想要这样做并付出额外的努力。这是值得的!

  

将.htaccess文件放在您正在使用的文件夹中(例如,如果您正在目录/company/中工作,那么您就放置了这在/company/.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L,QSA]

所以,我们现在在您的服务器上有一条路径可以接受其中的任何内容,如果它不存在的话。例如,如果您指向/company/Joe_Plumber,它将重定向到index.php。如果您指向/company/style.css并且它存在且具有正确的权限,则会向您提供您要求的文件。

  

在该目录中创建一个index.php文件。(例如,/company/index.php

现在,在您的.php文件中,您将不得不处理用户要求的内容。 Basename只会为您提供最后一个文件夹,因此,如果我们请求/company/foo/bar,则只会获得bar

$q = basename($_SERVER['REQUEST_URI']);
$q = str_replace('_',' ',$q); // Convert any underscores to spaces
echo "Hi, {$q}!";

这就是它的全部内容。如果我有任何方式可以澄清或帮助,请问。