Очистить URL-адреса с помощью PHP

Итак, я пытаюсь создать чистую систему URL-адресов в PHP, чтобы изменить такие URL-адреса http://example.com/index.php?projects=05 на: http://example.com/projects/05

До сих пор я понял, как использовать parse_url для сопоставления URL-адресов, которые выглядят как http://example.com/index.php/projects/05, но я не могу понять, как удалить «index.php» из URL-адреса. Есть ли способ использовать .htaccess для удаления index.php из строки URL?

Я знаю, что это своего рода простая проблема, но после обширного поиска в Google я не могу найти решение.


person Thomas    schedule 25.05.2012    source источник
comment
Вы должны использовать мод rewrite в .htaccess для превращения /index.php в /.   -  person tim    schedule 25.05.2012


Ответы (4)


Вам нужно будет сделать это в Apache, используя mod_rewrite. Вам нужно будет перенаправить все URL-адреса на ваш index.php, а затем, возможно, используя parse_url, выяснить, что с ними делать.

Например:

# Turn on the rewrite engine
RewriteEngine On

# Only redirect if the request is not for index.php
RewriteCond %{REQUEST_URI} !^/index\.php

# and the request is not for an actual file
RewriteCond %{REQUEST_FILENAME} !-f

# or an actual folder
RewriteCond %{REQUEST_FILENAME} !-d

# finally, rewrite (not redirect) to index.php
RewriteRule .* index.php [L]
person Okonomiyaki3000    schedule 25.05.2012
comment
У меня возникли проблемы с поиском способа автоматического перенаправления с помощью .htaccess. Можете ли вы привести пример? - person Thomas; 25.05.2012

Я использую следующий файл .htaccess, чтобы удалить часть index.php URL-адреса.

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !favicon.ico$

RewriteRule .* index.php/$0 [PT]

В противном случае я могу порекомендовать платформу Kohana в качестве эталона (у них также есть довольно хороший парсер URL-адресов и система контроллеров).

person Ben    schedule 25.05.2012

Концепция отделения фактических файлов/папок от URL-адреса называется маршрутизацией. Многие фреймворки PHP включают такую ​​функциональность, в основном используя mod_rewrite. В блоге есть хорошая запись о маршрутизации URL-адресов PHP, которая реализует простой автономный класс маршрутизатора.

Он создает отображение следующим образом:

mysite.com/projects/show/1 --> Projects::show(1)

Таким образом, запрошенный URL приводит к вызову функции show() класса Projects с параметром 1.

Вы можете использовать это для создания гибких сопоставлений красивых URL-адресов с вашим PHP-кодом.

person pixelistik    schedule 25.05.2012

Что-то вроде этого в вашем .htaccess :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

(Убедитесь, что модуль перезаписи включен)

person maxdec    schedule 25.05.2012