Anchal Bhargava Ответов: 1

Моя ссылка не работает после добавления правил в файл .htaccess


Привет,

У меня есть div на моей индексной странице, чей идентификатор - "charts", поэтому, если я даю "index#charts" в качестве значения в теге anchor, он работает нормально, но теперь я добавил .htaccess в свой проект для красивых URL-адресов.

Все остальные страницы работают нормально, и я написал правило в своем htaccess, что если url-адрес "all-charts/chart-name/year", то перенаправление на "index#charts". Моя проблема в том, что теперь он открывает индексную страницу, но не прокручивается вниз до этого div.

Если я прямо наберу "index#charts" в url-адресе, он будет работать.

Есть идеи, что я делаю не так?

Это своего рода сложная структура, так как у меня есть URL-класс, который проверяет все запросы и возвращает соответствующую страницу. Например, если я хочу вернуть страницу с именем "blog.php" тогда в ссылке я буду использовать "?page=blog" или для страницы "user_forum.php" я дам значение атрибута href "?page=user_forum". Но теперь я пытаюсь изменить его на seo-дружественный url.

Это мой код htaccess

RewriteEngine On

RewriteRule ^(backend)$ /backend/?page=index [NC,L]
RewriteRule ^(серверная часть)/?страницы=([а-Яа-З0-9-_]+)$ /серверной/?страницы=$1 [НЗ,л]

RewriteRule ^(блог)/([a-zA-Z0-9-_]+)$ /?page=read_blog&slug=$2 [NC,L]

RewriteRule ^(все диаграммы)/([а-Яа-я-_]+)/([0-9])$ /?индекс страница=#графика [НЗ,л]

RewriteRule ^([a-zA-Z0-9-_]+)/([0-9]+)$ /?page=$1&cp=$2 [NC,L]
RewriteRule ^([a-zA-Z0-9-_]+)$ /?Страница=$1 [NC,L]


А в якорном теге я использовал что-то вроде этого
<a href ="all-charts/january-chart/2018">Январь 2018</a>

Спасибо,
Анчал Бхаргава

Что я уже пробовал:

Я дважды проверяю все орфографические ошибки в правиле htaccess и в теге anchor. Я попробовал сменить удостоверение. Я добавил сообщение нижнего колонтитула, чтобы под ним было содержимое

Peter_in_2780

Покажите нам точные правила, которые вы используете в файле .htaccess (и где находится файл .htaccess). Используйте виджет "улучшить вопрос".

Patrice T

Цитата:"моя ссылка не работает после добавления правил в файл .htaccess"
Чтобы получить помощь по вашему коду, вы должны показать нам этот код.
Цитата:"Я дважды проверьте все орфографические правила в htaccess и в теге якоря. Я попробовал сменить удостоверение. Я добавил сообщение нижнего колонтитула, чтобы под ним было содержимое"
Покажи свой код!

1 Ответов

Рейтинг:
9

Jochen Arndt

Хэш-символ # это специальный символ, который будет преобразован. Есть Флаги RewriteRule: NE|noescape - Apache HTTP Server версии 2.4[^] флаг для пропуска преобразования:

Цитата:
По умолчанию специальные символы, такие как & и?, например, будут преобразованы в их эквивалент шестнадцатеричного кода. Использование флага [NE] предотвращает это.
Так что попробуйте это:
RewriteRule ^(all-charts)/([a-zA-Z-_]+)/([0-9])$ /?page=index#charts [NC,NE,L]


Anchal Bhargava

Привет,

Спасибо за ответ. Я пробовал, но это не решает проблему.

Но по ссылке, которую вы мне дали, если я использую флаг "R", он перенаправляет меня в нужное место, но url-адрес меняется на "?page=index#charts"

Jochen Arndt

Я пропустил, что вы устанавливаете не URL-адрес, а параметр.

Таким образом, решение зависит от того, как ваш скрипт обрабатывает параметр и перенаправляет его на страницу индекса. Это может помочь заключить значение параметра в кавычки:
?page='index#charts'

При этом может потребоваться обновить сценарий. Но использование флага NE все еще может быть необходимо, чтобы избежать преобразования. Но это также пройдет"?", как оно есть.

С другой стороны, вы можете изменить свой скрипт для де-преобразования параметра, если он не использует флаг NE (замените %23 на #).

Поэтому вы должны проверить, как ваш скрипт обрабатывает этот параметр.

Anchal Bhargava

Привет,

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

Но когда я прямо набираю "index#charts", он работает. Поэтому я думаю, может быть, потому, что " # " - это символ комментария в htaccess, поэтому он не работает, потому что, когда я набираю тот же url-адрес непосредственно в браузере, он не соответствует никакому правилу и не проходит напрямую.

Но если это проблема, то как мне избежать"#", я попытался добавить "\" перед ним, но это не сработало

Jochen Arndt

Флаг NE делает именно это.
Хауэр, насколько я знаю, хэш-символ рассматривается только как символ комментария, когда он находится в начале строки (или когда он не находится внутри директивы).
Использование кавычек всегда будет относиться к нему как к нормальному символу.

Разве вы не можете проверить переданный параметр в своем скрипте?
Что происходит, когда вы вводите URL-адрес скрипта с этим параметром (url-to-page?page=index#charts)?

Anchal Bhargava

Привет,

Я попробовал использовать флаг NE, но он не работает, я не знаю почему. Как бы то ни было, я узнал, что могу использовать "\%23" для экранирования "#" в htaccess, и теперь это работает. Хотя сейчас мне приходится использовать javascript, чтобы прокрутить вниз до этого идентификатора, но он работает.

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

Jochen Arndt

Спасибо Вам за ваши отзывы.
Witheout флаг NE # должен быть преобразован в %23 по правилу.
Так что я тоже не знаю, что случилось, но прекрасно слышать, что вы все решили.