apache réécrit tout le tag de hachage à la barre oblique sous un répertoire

Comment réécrire tous les balises de hachage à la barre oblique sous un seul répertoire? (apache)

http://www.domain.com/company/index#about => http://www.domain.com/company/index/about http://www.domain.com/company/article#123456 => http : //www.domain.com/company/article/123456 http://www.domain.com/company/events#October => http://www.domain.com/company/events/October

Donc, toutes les pages sont dans /company/ , rewrite # => / .

 $(window).on('hashchange', function() { // } 

En général, tous les navigateurs excluent la partie fragmentée (#) de la requête sur le serveur. Si vous voulez vraiment le faire, vous devez réécrire les URL avant d’appeler le serveur

 function addHashtag2Pathname(url){ var a = document.createElement('a'); a.href = url; if (a.pathname.substr(-1) != "/") a.pathname = a.pathname + '/'; a.pathname += a.hash.replace(/^#/,''); a.hash = ''; return a.href.replace(/#$/,''); } 

Vous pouvez voir cette fonction en action ici http://jsfiddle.net/bknE4/43/

En fait je n’ai pas essayé ceci ci-dessous, mais ça devrait marcher …

 $(window).on('hashchange', function() { var newurl = addHashtag2Pathname(location.href); location.href = newurl; }) 

Si vous naviguez sur votre navigateur Web à l’ http://www.domain.com/company/events#October , il récupérera l’URL http://www.domain.com/company/events sur le serveur. Le serveur ne voit pas le rest de l’URL et ne peut rien faire avec. Seul Javascript peut agir dessus.

 $(window).on('hashchange', function() { var a_tags = document.getElementsByTagName('a'); for (var i = 0; i < a_tags.length; i = i + 1) { var elem = a_tags[i]; if (/company.*#/.test(elem.href)){ elem.href = elem.href.replace('#', '/'); } } } 

Vous voudrez peut-être modifier l'expression rationnelle dans le conditionnel pour être plus précis. La même chose pour la fonction de remplacement.

Cependant, je changerais plutôt le côté serveur HTML s'il est supposé être permanent.