RewriteRule ^product product.php [L,NC]
Я удивлен, что это не приводит к циклу перезаписи?(Но это, возможно, зависит от остальной части вашей конфигурации. Например, у вас включено MultiViews
?)
Это ловит любой запрос, который просто запускает /product
и переписывает в/product.php
.Таким образом, /product/page/6
переписывается на /product.php
и номер страницы теряется.Кстати, запрос на /product
также будет перехвачен первым RewriteRule
, переписав запрос на product-detail.php?asin=product
?!Кроме того, если у вас включен MultiViews
, это также может привести к конфликту.
Вместо этого вы можете сделать что-то вроде следующего:
Options -MutliViews
RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)$ product-detail.php?asin=$1 [L]
RewriteRule ^product(?:/page/([0-9]+))?$ product.php?page=$1 [L,NC]
Это объединяет оба правила и делает /page/<n>
часть URL необязательна.Что приведет к перезаписи на product.php?page=
- , см. Примечание ниже .
Вы уверены, что вам нужен флаг NC
на втором RewriteRule
?Это потенциально создает «дублированный контекст», если у вас нет канонических тегов.(Я удалил его в первый раз, поскольку вы уже проверяете прописные / строчные буквы непосредственно в регулярном выражении.)
if (isset($_GET['page'])) {
$Product_page = $_GET['page'] ;
}
else {
$Product_page = 1;
}
Вы, похоже, доверяете значению page
URL-параметр.Как отмечалось выше, это может быть законно пустым, поэтому по умолчанию следует 1
для любого недопустимого значения , а не только тогда, когда оно вообще отсутствует.