Для работы apache RewriteRule требуется завершающий слеш в конце URL - PullRequest
6 голосов
/ 12 июня 2011

Хорошо, поэтому у меня есть 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=item&id=$1&desc=$2&page=$3

Я нашел это после поиска:

# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]

которая решает мою проблему, но как я могу сделать так, чтобы конечный слеш был необязательным для пользователя, если пользователь хочет добавить его или нет, поэтому он не будет перенаправлять каждый раз, когда слэш не найден

Ответы [ 2 ]

1 голос
/ 17 января 2012

Вы можете обработать запрос, используя один rewriterule.

RewriteRule ^item(?:\.php)/([0-9]+)/([^/]+)?/?([^/]+)?/?$ item.php?action=item&id=$1&desc=$2&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"

Будьте осторожны, не используйте это в работе.

0 голосов
/ 28 декабря 2011

Используйте два правила перезаписи (одно с и без "страницы"):

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^item/([0-9]+)/(.*)/?$ item.php?action=item&id=$1&desc=$2
RewriteRule ^item/([0-9]+)/(.*)/(.*)/?$ item.php?action=item&id=$1&desc=$2&page=$3
...