.htaccess для передачи параметров и удаления имени страницы

#regex #apache #.htaccess #mod-rewrite #url-rewriting

#регулярное выражение #apache #.htaccess #мод-перезапись #url-переписывание

Вопрос:

На моем веб-сайте у меня следующая структура папок:

      example.com/
                reports/
                        causelist/
                                 final_causelist.php
  

У меня есть ссылка / URL на final_causelist.php страница выглядит так:

 http://example.com/reports/causelist/final_causelist.php?wb_sno=23amp;dated=2020-10-26amp;j_names=Mr. ABC
  

Я хочу получить доступ к странице следующим образом:

 http://example.com/23/2020-10-26/Mr. ABC
  

Для вышеупомянутого я создал .htaccess в папке causelist со следующим кодом:

 RewriteEngine on  
RewriteBase /reports/causelist/
Options -Indexes

RewriteRule ^(d )/([a-z-] )/(. )/$ /final_causelist.php?wb_sno=$1amp;dated=$2amp;j_names=$3 [L,B]
  

Но он не показывает страницу и жалобу на то, что запрашивающая страница не найдена на этом сервере?

Ответ №1:

Ваше регулярное выражение неправильно соответствует date части, и вы должны удалить начало / из цели, поскольку вы используете RewriteBase .

 Options -Indexes
RewriteEngine on
RewriteBase /reports/causelist/

RewriteRule ^(d )/([d-] )/(. ?)/?$ final_causelist.php?wb_sno=$1amp;dated=$2amp;j_names=$3 [L,QSA]
  

Комментарии:

1. Ваше решение работает нормально, когда я помещаю строки в файл .htaccess , существующий в корневом каталоге моего веб-сайта. Но скопируйте свой код в другой .htaccess и поместите его в example.com/reports/causelist/.htaccess значит, он все равно потерпит неудачу?

2. Приведенный выше код должен быть помещен в reports/causelist/.htaccess , и я предполагаю final_causelist.php , что он существует в том же reports/causelist/ подкаталоге. Убедитесь, что при тестировании нет другого правила в reports/causelist/.htaccess

3. Да, согласно вашим рекомендациям, у меня есть только два файла, один из которых находится в reports/causelist/ каталоге, final_causelist.php а второй — .htaccess файл, содержащий только предложенный вами код.

4. Но у меня есть другой .htaccess файл в моем корневом каталоге, который включает в себя некоторые другие правила.

5. может быть это: RewriteRule ^(d )/([d-] )/([^/] )/([^/] )/?$ final_causelist.php?wb_sno=$1amp;dated=$2amp;j_names=$3amp;fourth=$4 [L,QSA]

Ответ №2:

Не могли бы вы попробовать следующее.

 RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(d )/(d{4}-d{2}-d{2})/(. ?)/?$
RewriteRule ^.*$ /reports/causelist/final_causelist.php?wb_sno=mp;dated=*mp;j_names=%3 [QSA,NE,NC,L]
  

Комментарии:

1. Как и решение @anubhava, ваше решение также работает нормально, когда я помещаю строки в файл .htaccess, существующий в корневом каталоге моего веб-сайта. Но скопируйте свой код в другой .htaccess и поместите его в example.com/reports/causelist/.htaccess значит, он все равно потерпит неудачу?

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

3. Вы можете удалить RewriteBase директиву, поскольку вы используете абсолютный URI в target

4. @anubhava, спасибо, сэр, я собирался спросить вас, почему это не работает для OP cheers 🙂