Хорошо, так что это может быть не полный ответ, но он должен помочь вам найти свой путь.
Вы можете использовать регулярное выражение для соответствия желаемому шаблону пути. Так, например, ваш htaccess может выглядеть примерно так ...
# Check if module is installed
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Check query for matching pattern and pass id, but also append additional query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\/]+\/)?product\/([0-9]+)$ /$1product.php?id=$2 [L,QSA]
# If not file or directory on server, send to 404.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.php [L]
</IfModule>
А это делает ...
1. Сопоставьте uri с шаблоном регулярного выражения
Regex: ^([^\/]+\/)?product\/([0-9]+)$
^
- начало строки. ([^\/]+\/)?
- соответствует любому каталог (если существует) и сохраняет его для повторного использования. product\/([0-9]+)
- желаемый путь, например, product/50
, и сохраняет номер «id» для повторного использования. $
- конец строка.
2. Передайте захваченный каталог и идентификатор в наш файл
Примерно так: /$1product.php?id=$2 [L,QSA]
$1
- это имя нашего каталога, включая завершающий sla sh например subsubsite/
$2
- это идентификатор нашего продукта, например 50
[L,QSA]
Флаг QSA означает, что мы можем получить доступ к дополнительным параметрам строки запроса, например, /product/50?show=all&updated=1
. Подробнее о флагах можно узнать здесь http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa
3. 404 ничего не соответствует
Примерно так:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.php [L]
!-f
Если запрос не является файлом !-d
Если запрос не каталог /404.php
Файл, используемый для представления ошибки 404.
Получение идентификатора ...
С помощью приведенного выше вы можете получить идентификатор в своем product.php
файле следующим образом:
$id = (int)$_GET[ 'id' ];