Удалить расширение .php с помощью PHP - PullRequest
3 голосов
/ 27 августа 2009

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

Есть идеи?

/ Tobias

Ответы [ 4 ]

5 голосов
/ 27 августа 2009

Если вы обслуживаете через Apache, вам нужно посмотреть на <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule" rel="noreferrer">mod_rewrite</a>.

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

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

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

3 голосов
/ 27 августа 2009

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

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 файлами. Вы можете использовать любую маску файла, которую вы хотите. Или другая директива, например, .
Если все файлы в определенном каталоге (и, возможно, его подкаталогах) являются сценариями php, вы даже можете поместить файл .htaccess в этот каталог с помощью

ForceType application/x-httpd-php

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

2 голосов
/ 27 августа 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 Вы можете использовать: htp: //mydomain.com/foo/123/bar/456

Веселитесь.

0 голосов
/ 27 августа 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
...