用PHP删除.php扩展名

时间:2009-08-26 21:47:09

标签: php clean-urls

我可以在这里使用一些帮助。我正在使用它来修复我的URL,但我无法弄清楚如何删除.php扩展名。 URL现在看起来像这样:http://mydomain.com/page.php/foo/123/bar/456

function decode_URL_parameters() {
   $path = @$_SERVER['PATH_INFO'];
   $url_array=explode('/',$path);

   array_shift($url_array);

   while ($url_array) {
      $_GET[$url_array[0]] = $url_array[1];
      array_shift($url_array);
      array_shift($url_array);
   }
}

有什么想法吗?

/托拜厄斯

4 个答案:

答案 0 :(得分:5)

如果您通过Apache提供服务,则需要查看mod_rewrite

使用mod_rewrite,您可以修改URL映射到应用程序实际端点的方式。对于你的例子,你会想要这样的东西:

RewriteEngine on 
RewriteRule ^/?page/(.*)$ page.php/$1 [L]

This page还有其他一些简单的例子。

答案 1 :(得分:3)

您可能已将您的网络服务器配置为让php处理所有具有.php扩展名的文件的请求。我们假设它是一个apache。然后有类似

的东西
AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt

<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

在其中一个配置文件中。第二个告诉apache所有匹配掩码.php $的文件应该由注册类型application / x-httpd-php(php)的模块/处理程序处理。
但您不必将其限制为.php文件。您可以使用任何所需的文件掩码。或者另一个指令,例如<Directory>
如果特定目录(可能是其子目录)中的所有文件都是php脚本,您甚至可以将.htaccess文件放在该目录中

ForceType application/x-httpd-php

并且apache会将任何文件视为php脚本。 ForceType会覆盖以前的任何处理程序设置。

答案 2 :(得分:2)

在Apache下,将.htaccess文件放在包含page.php文件的目录中。

如果page.php文件包含在根目录(即/page.php)中,那么只需在.htaccess中添加:

RewriteEngine On
RewriteBase /

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

但是,如果page.php文件中包含in / say_folder/another_folder/page.php

然后你需要将它放入你的.htaccess:

RewriteEngine On
RewriteBase /

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

等等。

这是什么,它只是从URL中删除page.php。所以在你的情况下:

而不是:http://mydomain.com/page.php/foo/123/bar/456 您可以使用:htp://mydomain.com/foo/123/bar/456

玩得开心。

答案 3 :(得分:0)

谢谢你的所有答案,但如果我使用mod_rewrite,那么每当我创建一个新页面时,我就会制定新的规则(和很多)。其中有很多:)

也许如果我使用.htaccess将所有网址重定向到我的index.php,然后在那里修复我的网址,例如wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress