Я нашел это решение в Интернете:

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

4
RaV 26 Авг 2014 в 14:35
Какие именно URL-адреса вы пытаетесь открыть?
 – 
Justin Iurman
26 Авг 2014 в 14:37
ссылка <- без перезаписи ссылка <- при перезаписи не работает
 – 
RaV
26 Авг 2014 в 14:41
Вы пытаетесь связаться с /130/35 или /130/35/? Потому что ваше правило соответствует только при наличии косой черты в конце
 – 
Justin Iurman
26 Авг 2014 в 14:50
Нет, RewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L] добавляет косую черту в конце.
 – 
RaV
26 Авг 2014 в 14:56

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/
3
Justin Iurman 26 Авг 2014 в 15:06
Спасибо чувак. Это прекрасно работает. Все дело в порядке перезаписи?
 – 
RaV
26 Авг 2014 в 15:18
Ну, в вашем коде было много ошибок. Я переписал ваше правило конечной косой черты и изменил ваши шаблоны в ваших двух правилах (порядок в этом коде не важен)
 – 
Justin Iurman
26 Авг 2014 в 15:22