2009-08-20 3 views
1

У меня проблемы с тем, как я должен структурировать страницы, страницы продуктов, веб-страницы.mod_rewrite Электронная торговля URL-адрес

Это примерно перевести так:

  1. /bags/nicebag.html = /product.php?product=nicebag&category=bags
  2. /nicebag.html = /product.php?product=nice_bag
  3. /bags = productlisting.php?&category=bags

Проблема заключается в том, что веб-страниц разделит ту же структуру URL, как № 2 в списке /contact.html = page.php?page=contact

Причина, по которой он не указан в .htaccess, заключается в том, что веб-страницы могут иметь разные имена. И даже одна страница может быть на нескольких языках.

Причина отсутствия. 1 и 2 не объединены, иногда я просто хочу ссылаться только на продукт, так как он может быть в нескольких категориях.

Какую структуру вы предлагаете?

.htaccess

# Mod rewrite enabled. 
Options +FollowSymLinks 
RewriteEngine on 

# ---- Rules ---- 

# product.php (Search for category & product name) 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)\.html?$ product.php?prod_id=$2&cid=$1 [NC,L] 

# productlisting.php (Search for category) 
RewriteRule ^([A-Za-z0-9-_]+)?$ productlisting.php?&cid=$1 [NC,L] 

ответ

2

использовать другой суффикс для различных типов, например HTML для продуктов и HTM для страниц или что-то подобное, что

/bags/nicebag.html = /product.php?product=nicebag&category=bags 
/nicebag.html = /product.php?product=nice_bag 
/bags = productlisting.php?&category=bags 
/contact.htm = page.php?page=contact 

или

/contact/page.html = page.php?page=contact 
+0

Это была моя мысль. Я пойду с этим. – Cudos

+0

ура, есть мяч –

0

я столкнулась с очень такой же вопрос несколько недель назад. Закончено определение другой структуры для «статических» страниц.

www.examples.com/contact/ или www.examples.com/info/contact.html

Таким образом, можно отличить от "динамических" страниц.

+0

Думал то же самое. Но я чувствую себя немного неуклюжей, чтобы так поступать. Но, возможно, мне нужно это сделать :( – Cudos

0

Практически невозможно отличить www.examples.com/nicebag.html и www.examples.com/contact.html, не помещая имена веб-страниц непродукта в .htaccess или выполнять предварительную обработку в принимающем php скрипт.

Как я вижу, варианты:

  1. переписывают все запросы page.php и для тех, которые не соответствуют ни одной из страниц, не продукт, включить сценарий по продукту

  2. записывать названия продуктов без продукта .htaccess динамически (беспорядочно и подвержен ошибкам) ​​

  3. переосмыслить структуру URL-адресов для страниц, не относящихся к продукту. Возможно, так же мало, как www.example.com/page/contact.html может помочь

Я бы выбрал третий вариант.

4

Я бы использовал префикс пути /products/, чтобы идентифицировать URL-адреса продуктов.Итак:

  • /products/bags/nicebag.html/product.php?product=nicebag&category=bags
  • /products/nicebag.html/product.php?product=nice_bag
  • /products/bags/productlisting.php?&category=bags

С такой структурой можно также переписать /products/ в /productlisting.php, что показаны все продукты.

# product listing 
RewriteRule ^products/$ productlisting.php [L] 
RewriteRule ^products/([A-Za-z0-9-_]+])$ productlisting.php?category=$1 [L] 
# product details 
RewriteRule ^products/([A-Za-z0-9-_]+)\.html$ product.php?prod_id=$1 [L] 
RewriteRule ^products/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)\.html$ product.php?prod_id=$2&cid=$1 [L] 
# other pages 
RewriteRule ^([A-Za-z0-9-_]+)\.html$ page.php?page=$1 [L] 
+0

Идея состоит в том, чтобы избежать добавления лишних ключевых слов в URL-адрес. Потому что это может иметь некоторые непредвиденные негативные последствия для Оптимизации поиска в Google. – Cudos

0

Я рекомендовал бы плоскую структуру:

  • domain.com/bags
  • domain.com/contact
  • domain.com/nice-bag
2

Как это будет беспорядочным и громоздким, чтобы поддерживать ваши правила перезаписи в файле .htaccess, я бы поставил там только одно правило, переписывая что-то вроде:

/dispatch.php?request=[request] 

e.g.

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

В dispatch.php, вы рассекать запрос в ее элементов (путь, строки запроса, якорь, ...) и решить, куда идти оттуда. Таким образом, вы можете использовать код для принятия решений, что даст вам гораздо больше гибкости, чем просто сохранение огромного списка пользовательских сопоставлений перезаписи.

Например, вы можете идентифицировать элементы продукта и категории в пути путем запроса к вашей базе данных и основывать логику отправки на результаты более общим образом.

[Pseudocode] 
if (isProduct($lastPathElement)) { 
    // Maybe verify that leading path elements are categories ... 
    // Other preparations/verifications ... 
    // refer execution to product.php 
} 
elseif (isCategory($lastPathElement)) { 
    // Other preparations/verifications ... 
    // refer execution to productlisting.php 
} 
// ... (Checks for other specific stuff) 
else { 
    // Static page or 404 
    // refer execution to page.php 
} 
+0

Это очень хорошо! код не позволяет этого.Я должен был разработать мой код с этой точки зрения в первую очередь. – Cudos

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