Мой текущий код что-то вроде этого
store.php?storeid=12&page=3
и я хочу перевести его на что-то вроде этого
mysite.com/roberts-clothing-store/store/12/3
и что-то вроде этого:
profile.php?userid=19
в
mysite.com/robert-ashcroft/user/19
Я понимаю, что лучше всего использовать текст, максимально удобный для SEO,
mysite.com/user/19/robert-ashcroft
(что делает stackoverflow)
Я не могу понять, как это сделать в mod_rewrite от apache. Любая помощь?
На самом деле вам, возможно, придется подумать «вверх тормашками» с mod_rewrite
.
Самый простой способ – заставить ваш PHP mysite.com/roberts-clothing-store/store/12/3
переписанные ссылки mysite.com/roberts-clothing-store/store/12/3
.
mod_rewrite
затем проксирует запрос на одну страницу PHP для rewrite.php?path=roberts-clothing-store/store/12/3
storeid
, которая расшифровывает URL-адрес и устанавливает аргументы (здесь storeid
и page
) и динамически включает правильный файл PHP , или просто исправить 301 для переименованных страниц.
Чистое решение с mod_rewrite
возможно, но это намного легче получить, особенно если вы не mod_rewrite
.
Основная проблема может заключаться в накладных расходах, которые могут быть значительными, но это цена простоты и гибкости. mod_rewrite
намного быстрее
Другие сообщения отвечают на вопрос, но они не решают типичную проблему с дублированием контента, которую избегают с помощью канонических URL-адресов (и используя 301/404 для всех этих URL-адресов, которые выглядят нормально, но не являются).
Попробуйте следующие правила:
RewriteRule ^[^/]+/store/([0-9]+)/([0-9]+)$ store.php?storeid=$1&page=$2 RewriteRule ^[^/]+/user/([0-9]+)/ profile.php?userid=$1
Но я бы не использовал такие URL-адреса. Они не имеют смысла, когда вы рассматриваете путь URL как иерархию и сегменты пути как свои уровни.
Тогда вы можете просто использовать директиву RewriteRule в .htacces, например:
RewriteRule roberts-clothing-store/store/(\d+)/(\d+)$ store.php?storeid=$1&page=$2 [L]
См. http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html для справки или google.
RewriteRule ^roberts-clothing-store/store/([^.]+)/([^.]+)$ store.php?id=$1&page=$2 RewriteRule ^robert-ashcroft/user/([^.]+)$ profile.php?userid=$1
Мой подход состоит в том, чтобы сделать .htaccess как можно проще и сделать всю тяжелую работу в PHP:
RewriteRule ^(.*?)$ index.php?$1
Это в основном означает взять все и перенаправить его в файл index.php (в каталогах css / javascript / image я просто использую «RewriteEngine off» для доступа к этим файлам). В PHP я просто разделил («/», $ param, 5) строку и запустил foreach (), чтобы проверить все параметры. Инкапсулированный в хорошую функцию, это отлично работает для меня.
Обновить:
В этом простом случае я настоятельно рекомендую использовать explode () вместо использования split (), потому что explode () не приходит с накладными расходами, используя регулярные выражения.