Мод Переписать Проблемы - PullRequest
0 голосов
/ 10 октября 2009

Я хочу иметь основной раздел, который находится на services.php, а затем некоторые подразделы, такие как services_logodesign.php.

Я хочу, чтобы URL был похож на: Когда я нажимаю кнопку, чтобы открыть services_logodesign.php, браузер должен показывать «services / logo design»

У меня есть несколько других подразделов, было бы неплохо иметь один код для любых других страниц.

1 Ответ

0 голосов
/ 10 октября 2009

Самый простой способ сделать то, что вы хотите, - это перенаправить все запросы на то, что по сути является диспетчерским скриптом - index.php был бы хорошим кандидатом на такой диспетчерский скрипт.

Ваш файл .htaccess в корне вашего сайта будет выглядеть так:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Эта конфигурация mod_rewrite будет отправлять все запросы на index.php. Это означает, что запросы на / services / logo design / (кстати, пробелы в URL-путях не очень хорошая идея) или / foo / bar или / blah / blah / blah все пойдут в /index.php

Ваш скрипт index.php может разбить элементы url на массив для обработки, как вы хотите.

$req = array_map( "urldecode", array_filter( explode( '/', $_SERVER['REQUEST_URI'] ) ) );

Если вы отправили запрос / bloop / bleep / blorp, строка приведенного выше кода php поместит в массив $ req следующее:

массив ( 'Bloop', 'бип', 'blorp');

Или запрос вроде / services / logo_design / будет выглядеть так: array ('services', logo_design)

Простой способ обработать этот массив:

if ($req[0] == 'services') {
  if ($req[1] == 'logo_design') { include_once(services_logodesign.php); }
  else { include_once(services.php); }
}

Видите, как это работает? Хотя это упрощенный пример того, что вы должны делать, он намного, намного лучше и безопаснее, чем способ, которым вы пытаетесь выполнить ту же задачу.

...