доступ /product/product.php
в строке URL, он перенаправляется на /product/
для удобства
Вы также можете перенаправить /product/product.php?product=12345
на соответствующий канонический URL (ie. /product/12345
) - все, что вы можете сделать в том же правиле. Если продукт ID только цифра c, тогда вы должны соответствующим образом ограничить свое регулярное выражение - это также позволит избежать необходимости в дополнительном условии.
Например:
# Canonical redirect
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^(?:product=(\d*))?$ [NC]
RewriteRule ^product/product\.php$ /product/%1 [NC,R=307,L]
# Rewrite requests from "pretty" URL to underlying filesystem path
RewriteRule ^product/(\d*) /product/product.php?product=$1 [L]
Условие, которое проверяет переменную окружения REDIRECT_STATUS
, необходимо для предотвращения перенаправления l oop в этом случае, поскольку строка запроса является полностью необязательной.
Путем ограничения соответствия только цифрами, мы избегаем необходимости в дополнительном условии для внутренней перезаписи, product.php
не будет соответствовать. Если продукт id может содержать буквы, ограничьте шаблон, чтобы избежать точек (.
), например. ([^./]*)
.
Включать флаг NC
во внутреннюю перезапись можно только в том случае, если это строго необходимо, в противном случае это может создать проблему с дублированным содержимым.