3

我可以在这里使用一些帮助。我正在使用它来修复我的 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

4 回答 4

5

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

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

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

这个页面有一些其他简单的例子。

于 2009-08-26T22:02:51.120 回答
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会覆盖任何先前的处理程序设置。

于 2009-08-26T22:18:24.880 回答
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 文件包含在可以说 /a_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

玩得开心。

于 2009-08-26T22:26:09.420 回答
0

感谢您的所有回答,但如果我使用 mod_rewrite,那么每次创建新页面时我都必须制定新规则(以及许多规则)。而且有很多:)

也许如果我使用 .htaccess 将所有 url 重定向到我的 index.php,然后在那里修复我的 URL,比如 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
于 2009-08-26T23:17:10.813 回答