#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 в target4. @anubhava, спасибо, сэр, я собирался спросить вас, почему это не работает для OP cheers 🙂