для работы apache RewriteRule требуется косая черта в конце URL-адреса

#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