#apache #.htaccess #mod-rewrite #url-rewriting
#apache #.htaccess #мод-перезапись #url-перезапись
Вопрос:
Хорошо, итак, у меня есть URL, подобный
domain.com/item/item_id/item_description/page
когда я набираю ссылку без
/page
в URL-адресе он выдает ошибку 404, и я должен ввести косую черту в URL-адресе, чтобы заставить его работать..
это мой код htaccess
Options FollowSymLinks
RewriteEngine On
RewriteRule ^item/([0-9] )/(.*)/(.*)/?$ item.php?action=itemamp;id=$1amp;desc=$2amp;page=$3
я нашел это после поиска:
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
что в некотором роде решает мою проблему, но как я могу сделать конечную косую черту необязательной для пользователя, если пользователь хочет добавить ее или нет, чтобы она не перенаправлялась каждый раз, когда косая черта не найдена
Ответ №1:
Вы можете обработать запрос, используя один rewriterule.
RewriteRule ^item(?:.php)/([0-9] )/([^/] )?/?([^/] )?/?$ item.php?action=itemamp;id=$1amp;desc = $ 2 amp;page = $ 3 [L]
Пожалуйста, обратите внимание, что я добавил (?:.php)
раньше ^item
, просто чтобы убедиться, что этот rewriterule работает, если ваш веб-сервер по какой-либо причине преобразует запрос
domain.com/item/...
в
domain.com/item.php/...
Совет: вы можете увидеть текущее поведение rewriterule, включив RewriteLog:
RewriteLogLevel 9
RewriteLog "/var/log/apache2/dummy-host.example.com-rewrite_log"
Будьте осторожны, не используйте это в рабочей среде.
Ответ №2:
Используйте два правила перезаписи (одно с «страницей» и одно без нее):
Options FollowSymLinks
RewriteEngine On
RewriteRule ^item/([0-9] )/(.*)/?$ item.php?action=itemamp;id=$1amp;desc=$2
RewriteRule ^item/([0-9] )/(.*)/(.*)/?$ item.php?action=itemamp;id=$1amp;desc=$2amp;page=$3