Как сделать rewriterule добавить якоря в URL WordPress вместо "/"? - PullRequest
0 голосов
/ 10 января 2012

Я - .htaccess nOOb, но я думаю, что это лучший способ сделать это.Мне нужно, чтобы WordPress изменил «/» на «#» в URL.Структура выглядит так: http://thewebsite/pageid/sub_pageid и желаемый эффект будет http://thewebsite/pagid#sub_pageid.Я пробовал несколько правил, которые я нашел в Интернете, но каждое из них не удалось.Я верю этому, потому что у меня есть те правила, примененные к нему.Есть только одна страница, для которой у меня есть подстраницы, и это единственная страница, которую нужно переписать.После перенаправления я хочу, чтобы jquery прокрутил вниз до якоря.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /thewebsite/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /thewebsite/index.php 
</IfModule>
# END WordPress

Я пробовал RewriteRule ^ page / page # [NE], но мне не удалось.Я пробовал много других, но безрезультатно.Надеюсь, что кто-то имел эту проблему раньше и просто знает, или может объяснить, почему я терплю неудачу.Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Если вы просто пытаетесь переписать его для одной страницы, попробуйте:

RewriteRule [page\_id]\/(.*) /page_id#$1 [NE,R=301]

Это должно быть все, что вам нужно для определенного идентификатора страницы или строки.NE означает «noescape», позволяя переписать символ хеша (#).

Для любого идентификатора страницы:

RewriteRule ([0-9]+)\/(.*) /$2#$1 [NE,R=301]
0 голосов
/ 10 января 2012

Хорошо, Поскольку я - .htaccess-lame, я решил использовать jQuery для решения моей проблемы. Я использовал .attr () для замены исходного атрибута 'href'. Мне удалось изменить ссылки на подстраницы с помощью:

$(function(){
        $('#menu_on_HOME a').each(function(i){
        var atitle = $(this).attr("href");
        var strRep = atitle;
            n = strRep.lastIndexOf('/'); //finds the last occurence of '/' to replace with '#'
                if (n >= 0 && n + strRep.length >= strRep.length) {
                    strRep = strRep.substring(0, n) + "#" + strRep.substring(n + 1, n + strRep.length); // this is where magic happens
                }
        $(this).attr("href", strRep); //here is where I replace the original attribute 'href'
        });
    });

Приведенная выше функция отправляет меня на страницу № страницы, где страница содержит содержимое всех страниц, и нажатие на ссылку menu_on_HOME переходит прямо к привязке страницы. Более того, на самой странице PAGE у меня есть внутренние ссылки на подстраницы (контент можно редактировать с помощью cms как страницы), но мне не нужно было углубляться в подстраницу, а получить желаемую привязку, поэтому я использовал ScrollTo :

 $(function(){
        $('menu_on_PAGE a').each(function(i){
        var atitle = $(this).attr("href");
        var strRep = atitle;
            n = strRep.lastIndexOf('/'); 
            var name;
                if (n >= 0 && n + strRep.length >= strRep.length) {
                    name = strRep.substring(n + 1, n + strRep.length);
                    strRep = strRep.substring(0, n) + "#" + name;
                $(this).click(function(event){
                    var scroller = '#content a[name=' + name + ' ]'; //point to the anchor
            $(window).scrollTo(scroller,{duration:1500});
            });
                }
        $(this).attr("href", strRep);

        });
    });
$(window)._scrollable();     

Я не знаю, насколько «правильным» или «неправильным» является решение, однако оно работает для меня без нареканий :)

0 голосов
/ 10 января 2012

Попробуйте следующий код, если в этом нет необходимости, пропустите файл rewrite contidion download / .php, убедитесь, что вам нужно поместить файл 404 в папку вашего домена

 RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule (.*) index.php
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteCond %{SCRIPT_FILENAME} .*\.php|/$
    RewriteCond %{SCRIPT_FILENAME} !download\.php
    RewriteRule !/ index.php

    ErrorDocument 401 /401.html

Надеюсь, он вам поможет

...