Удалить расширение .php с помощью PHP

Здесь мне не помешала бы помощь. Я использую это, чтобы исправить свой 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);
   }
}

Любые идеи?

/Тобиас


person Tobias    schedule 26.08.2009    source источник
comment
Вы пытаетесь создать так называемые красивые URL-адреса, и они уже обсуждались на SO ранее. Этот ответ должен содержать то, что вы ищете.   -  person s4y    schedule 27.08.2009
comment
Вы не можете сделать это, используя только PHP, вам нужно покопаться в модуле Apache mod_rewrite.   -  person Alix Axel    schedule 27.08.2009


Ответы (4)


Если вы обслуживаете через Apache, обратите внимание на mod_rewrite.

Используя mod_rewrite, вы можете изменить способ сопоставления URL-адресов с фактическими конечными точками вашего приложения. Для вашего примера вам понадобится что-то вроде этого:

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

На этой странице есть несколько других простых примеров.

person Duncan Beevers    schedule 26.08.2009

Вероятно, вы настроили свой веб-сервер так, чтобы php обрабатывал все запросы файлов с расширением .php. Предположим, что это апач. Тогда есть что-то вроде

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

or

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

в одном из конфигурационных файлов. Второй сообщает апачу, что все файлы, соответствующие маске .php$, должны обрабатываться модулем/обработчиком, зарегистрированным для типа application/x-httpd-php (php).
Но вам не обязательно ограничить его файлами .php. Вы можете использовать любую маску файла. Или другая директива, например, например. ‹Каталог›.
Если все файлы в конкретный каталог (и, возможно, его подкаталоги) - это php-скрипты, вы даже можете поместить файл .htaccess в этот каталог с помощью

ForceType application/x-httpd-php

и apache будет рассматривать любой файл как php-скрипт. ForceType переопределяет любые предыдущие настройки обработчика.

person VolkerK    schedule 26.08.2009

Под 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]

И так далее.

Что это значит, он просто удаляет page.php из URL-адреса. Итак, в вашем случае:

Вместо: http://mydomain.com/page.php/foo/123/bar/456 Вы можете использовать: http://mydomain.com/foo/123/bar/456

Развлекайся.

person Waleed Amjad    schedule 26.08.2009

спасибо за все ответы, но если я использую mod_rewrite, то мне придется создавать новые правила (и многие) каждый раз, когда я создаю новую страницу. А их очень много :)

Возможно, если я перенаправлю все URL-адреса на свой index.php с помощью .htaccess, а затем исправлю там свой 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
person Tobias    schedule 26.08.2009