2016-03-29 5 views
0

Я хотел бы мой файл .htaccess для преобразования адреса, как это:Добавить якорь к URL с помощью .htaccess

http://localhost/onepage/ 

в URLs так:

http://localhost/onepage/#body 

Так #body суффикс должен быть добавлен к URLs.

Версия Apache - 2.4. Модуль перезаписи включен и работает.

. Файл Htaccess обрабатывается и локализован в каталоге файла index.php.

В порту 80 нет виртуальных хостов. Я использую xampp для окон.

Я попробовал такой строки кода:

 
    RewriteEngine On 
    RewriteRule ^/onepage/ /onepage/#body [NE,R] 

    #RewriteRule ^/onepage /onepage/#body [NE,R] 
    #RewriteRule ^/onepage/$ /onepage/#body [NE,R] 
    #RewriteRule "^/onepage/$" /onepage/#body [NE,R] 
    #RewriteRule /?onepage/? /onepage/#body [NE,R] 
    #RewriteRule ^/?onepage/? /onepage/#body [NE,R] 
    #RewriteRule ^/?onepage/?$ /onepage/#body [NE,R] 

Эти комментируемые линии были испытаны тоже, и не увенчались успехом. Эти строки ничего не делают. Как получить правильное перенаправление?

Благодаря

ответ

0

анкеров (например #body) обрабатывается на стороне клиента, а не на стороне сервера. Поэтому mod_rewrite не может добавить якорь #body к URL-адресу

+0

Но есть добавление якоря к URL в апача 2.4 документации http://httpd.apache.org/docs/current/rewrite/flags.html# flag_ne – trzczy

+0

Вы правы. Извините, я этого не заметил. Использование: RewriteRule one_page/rewrite_test.html#body \t [NE, R] –

+0

Но это должен быть тот же адрес. Я почти решил это. См. Мой ответ. – trzczy

0

Вам не нужно совпадать с ведущей косой чертой в шаблоне RewriteRule. Если вы тестируете эти правила в файле htaccess, удалите главную косую черту.

RewriteRule ^onepage/?$ /onepage#body [NE,R,L] 

Однако правило выше, до сих пор не правильно, так как целевой URL и шаблон является идентичным, и это вызовет цикл перенаправления.

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

  • /OnePage/тело/

Правило:

RewriteEngine on 
RewriteRule ^onepage/body/?$ /onepage#body [NE,R,L] 

Теперь вы можете легко перенаправить http://example.com/onepage/body до http://example.com/onepage#body

+0

Но мне нужно перенаправить 'http: // example.com/onepage /' на 'http: // example.com/onepage/# body' – trzczy

+0

Тогда вам нужно использовать javascript, это невозможно, используя htaccess, поскольку # is не влияют на серверную сторону. – starkeen

+0

Он реализован на стороне сервера. Вы можете увидеть в apache 2.4 документации http://httpd.apache.org/docs/current/rewrite/flags.html#flag_ne – trzczy

0

My Решение заключается в следующем:

.htaccess

#adding query string to prevent looping so RewriteCond lets rewrite only at the first time since there is not "anchor" query string. 

RewriteEngine On 
RewriteBase "/" 
RewriteCond "%{QUERY_STRING}" !anchor 
RewriteRule ^onepage/? /onepage/?anchor#body [QSA,NE,R=301] 
Смежные вопросы