Я нашел это решение в Интернете:
RewriteEngine On
RewriteBase /test/
RewriteRule ^([^-]*)/$ index.php?page=$1
RewriteRule ^([^-]*)/([^-]*)/$ index.php?page=$1&link=$2 [L]
#dodaje slash na koncu
RewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L]
Первый RewriteRule работает отлично, он возвращает мне $_GET['page']=130
. Но когда дело доходит до второго, он возвращает мне $_GET['page']=index.php
вместо $_GET['page']=130
и $_GET['link']=35
. Это заканчивается ошибкой SQL из-за числового идентификатора страницы.
Обычная ссылка выглядит так:
?page=136
?page=136&link=35
Переписанный:
/136/
- работает
/136/35/
- не работает, $_GET['page']=index.php
1 ответ
Вы можете заменить текущий код на этот (ваш htaccess должен находиться в папке test
, и то же самое для index.php
)
RewriteEngine On
RewriteBase /test/
# add trailing slash if no trailing slash and not an existing file/folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ $1/ [R=301,L]
RewriteRule ^([^/]*)/([^/]*)/$ index.php?page=$1&link=$2 [L]
RewriteRule ^([^/]*)/$ index.php?page=$1 [L]
Вы можете попробовать эти ссылки
http://domain.com/test/136/35/
внутренне перезаписывает наindex.php?page=136&link=35
http://domain.com/test/136/35
перенаправляет наhttp://domain.com/test/136/35/
http://domain.com/test/136/
внутренне перезаписывает наindex.php?page=136
http://domain.com/test/136
перенаправляет наhttp://domain.com/test/136/
Похожие вопросы
Новые вопросы
apache
Используйте этот тег (вместе с соответствующим тегом языка программирования) для вопросов программирования, касающихся HTTP-сервера Apache. Не используйте этот тег для вопросов о других продуктах Apache Foundation. Обратите внимание, что вопросы конфигурации сервера обычно лучше подходят на https://serverfault.com
/130/35
или/130/35/
? Потому что ваше правило соответствует только при наличии косой черты в концеRewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L]
добавляет косую черту в конце.