Поэтому я пытаюсь создать чистую систему 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 я не могу найти решение.
Вам нужно будет сделать это в 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]
Я использую следующий файл .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-адресов и система контроллера)
На самом деле вам не нужен php для этого, если вы можете создавать файлы .htaccess. Взгляните на http://corz.org/serv/tricks/htaccess2.php
Вы должны использовать mod rewrite в .htaccess для включения /index.php в /.
Концепция развязывания фактических файлов / папок с URL-адреса называется маршрутизацией . Многие фреймворки PHP включают такую функциональность, в основном используя mod_rewrite . В PHP URL Routing есть хорошая запись в блоге, которая реализует простой автономный класс маршрутизатора.
Он создает отображение следующим образом:
mysite.com/projects/show/1 --> Projects::show(1)
Таким образом, запрошенный URL-адрес вызывает функцию show()
вызываемого класса Projects
с параметром 1
.
Вы можете использовать это, чтобы создавать гибкие сопоставления довольно URL-адресов для вашего PHP-кода.
Что-то вроде этого в вашем .htaccess:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
(Убедитесь, что модуль перезаписи включен)