2010-11-28 4 views
2

Всего новичков на mod_rewrite.apache mod_rewrite: использование базы данных для обновления правил перезаписи

Скажем, я хочу, чтобы создать хороший URL-адреса для каждого производителя на моем сайте, поэтому я www.mysite.com/samsung www.mysite.com/sony www.mysite.com/acme

работает достаточно хорошо.

Однако, если у меня есть сотни производителей, и если они постоянно меняются, что тогда? Есть некоторые неопределенные ссылки на что-то, что называется переписывать карту где-то, но ничего, что объясняет это, и никаких учебных пособий. Может ли кто-нибудь помочь?

Кроме того, почему эта проблема не является основной темой, рассмотренной в учебниках для mod_rewrite? Как mod_rewrite может быть полезен, когда вы должны его поддерживать вручную (при условии, что у вас есть новый контент на вашем сайте время от времени)?

Также есть ссылка на необходимость доступа к httpd.conf Как мне получить доступ к httpd.conf на сервере моего хостинг-провайдера? Как это делает каждый другой сайт?

Благодаря

ответ

1

Как это обычно можно сделать то, что вы бы все URL, которые соответствуют заданному шаблону и направлять их в PHP файл (или любой другой ваш серверный язык программирования) для более сложной маршрутизации , Что-то вроде этого:

RewriteRule ^(.*)$ myroute.php?url=$1 [QSA,L] 

Затем в файле myroute.php, вы можете включать в себя логику, чтобы посмотреть на «URL» параметр строки запроса, так как он будет содержать URL оригинальный, который входит в Возможно, вам. может соответствовать этому производителю в базе данных или что-то еще.

Этот пример, очевидно, принимает все URL-адреса и сопоставляет их с myroute.php. Другим примером может быть что-то вроде:

RewriteRule ^/manufacturers/(.*)$ manuf.php?name=$1 [QSA,L] 

В этом случае она будет преобразовывать адреса так:

/Производители/сони => /manuf.php?name=sony
/Производители/Samsung => /manuf.php?name=samsung
и т.д ...

В этом случае файл manuf.php может посмотреть базу данных на основе параметра строки name запроса.

+0

ОК, это не произошло со мной ... спасибо :) но что тогда? перенаправить его через header() в правильный URL? как сохранить симпатичный URL? –

+1

@ A-OK Если mod_rewrite может использовать «внутреннюю» переадресацию, так что пользователь увидит URL-адрес, предварительно переписанный «красивым». Примеры того, где он не может быть, когда пункт назначения находится на отдельном хосте или когда вы явно сказали ему использовать перенаправление HTTP. –

+0

Я спрашивал в связи с приведенным выше примером. Если rewrite перенаправляет все URL-адреса в файл myroute.php, который, в свою очередь, перенаправляет их далее через header() (я не знаю, как еще), какой URL-адрес будет отображаться после того, как пользователь достигнет соответствующей страницы? –

2

Только что наткнулся на этот ответ, ища аналогичное решение. Искав немного дальше, я обнаружил, что mod_rewrite теперь имеет директиву RewriteMap, которая будет делать именно то, что вы хотите, без необходимости запуска PHP или другого языка сценариев.

Он позволяет определить правило сопоставления с текстовым файлом, файлом DBM, внешним скриптом или SQL-запросом.

Я надеюсь, что это поможет!

+0

Вау, спасибо, это именно то, что мне нужно. Особенно эта строка о [plain text maps] (http://httpd.apache.org/docs/trunk/rewrite/rewritemap.html#txt): Таким образом, когда запрашивается http://example.com/product/television, применяется RewriteRule, и запрос внутренне сопоставляется с http://example.com/prods.php?id=993 – cnlevy

Смежные вопросы