Расширение на ответах Родольфа и Галена немного.
Если ваши потребности в переписывании URL ограничены, жестко закодированный .htaccess
с правилами, описанными в примере Родольфа, будет хорошо.
Однако, как предлагает Гален, ваши потребности могут быть неизвестны, или вы можете захотеть расширить их позже, без необходимости прикасаться к правилам перезаписи, как только вы их заработаете.
Общим способом сделать это является разработка приложения по схеме URL, которая равна www.host.com/controller/action/parameter
. Примером такого URL может быть www.host.com/book/view/1
, который затем может обрабатываться внутренне несколькими способами.
1)
У вас есть отдельные скрипты для каждого контроллера. Затем вы переписываете каждый запрос в форму $controller.php?action=$action¶m=$param
, перенаправляя несоответствующие или недействительные запросы к контроллеру по умолчанию.
# Serve files and directories as per usual,
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
# If the request uri doesn't end in .php
# and isn't empty, rewrite the url
RewriteCond %{REQUEST_URI} !.php$
RewriteCond %{REQUEST_URI} !^$
# Try matching against a param request first
RewriteRule (.*?)/(.*?)/(.*?) $1.php?action=$2¶m=$3 [L]
# If it didn't match, try to match an action
RewriteRule (.*?)/(.*?) $1.php?action=$2 [L]
# redirect all other requests to index.php,
# your default controller
RewriteRule .* index.php [L]
2)
У вас есть единая точка входа (или фронт-контроллер), к которому вы перенаправлять каждый запрос, и этот фронт-контроллер обрабатывает перенаправлять запрос на соответствующий контроллер.
# Redirect all requests that isn't a file or
# directory to your front controller
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule .* index.php [L]
Общие правила резервного копирования не будут добавлять какие-либо параметры к контроллеру по умолчанию/фронту. Однако, поскольку это внутреннее перенаправление, у вас будет доступ к REQUEST_URI
в PHP, чтобы определить, что вы должны делать.
Это, естественно, не ваши единственные варианты. Только мои 2 цента в супе, чтобы немного пошевелиться.
Отказ от ответственности: Все вышеперечисленные правила переписывания (как и все остальное, конечно) написаны прямо с моей головы (после нескольких сортов пива) и нигде не проверялись.