Reputation: 13
I have pretty much standard rule that's adding slash to the end of the URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [R=301,L]
Ajax photo gallery is making some additions with hash # to the URL like URL/#photoset_photo_empty_progress
. I can't understand what htaccess blocks or does to hash string. But it screws this and gallery stops to work.
My thoughts are maybe it needs here some magic with htaccess to avoid this rule to be apply to hash string.
Please give me a solution because I can't even understand what's going wrong there.
var ls = ls || {};
ls.photoset =( function ($) {
this.idLast=0;
this.isLoading=false;
this.swfu;
this.initSwfUpload = function(opt) {
opt=opt || {};
opt.button_placeholder_id = 'photoset-start-upload';
opt.post_params.ls_photoset_target_tmp = $.cookie('ls_photoset_target_tmp') ? $.cookie('ls_photoset_target_tmp') : 0;
$(ls.swfupload).unbind('load').bind('load',function() {
this.swfu = ls.swfupload.init(opt);
$(this.swfu).bind('eUploadProgress',this.swfHandlerUploadProgress);
$(this.swfu).bind('eFileDialogComplete',this.swfHandlerFileDialogComplete);
$(this.swfu).bind('eUploadSuccess',this.swfHandlerUploadSuccess);
$(this.swfu).bind('eUploadComplete',this.swfHandlerUploadComplete);
}.bind(this));
ls.swfupload.loadSwf();
}
this.swfHandlerUploadProgress = function(e, file, bytesLoaded, percent) {
$('#photoset_photo_empty_progress').text(file.name+': '+( percent==100 ? 'resize..' : percent +'%'));
}
this.swfHandlerFileDialogComplete = function(e, numFilesSelected, numFilesQueued) {
if (numFilesQueued>0) {
ls.photoset.addPhotoEmpty();
}
}
this.swfHandlerUploadSuccess = function(e, file, serverData) {
ls.photoset.addPhoto(jQuery.parseJSON(serverData));
}
this.swfHandlerUploadComplete = function(e, file, next) {
if (next>0) {
ls.photoset.addPhotoEmpty();
}
}
this.addPhotoEmpty = function() {
template = '<li id="photoset_photo_empty"><img src="'+DIR_STATIC_SKIN + '/images/loader.gif'+'" alt="image" style="margin-left: 35px;margin-top: 20px;" />'
+'<div id="photoset_photo_empty_progress" style="height: 60px;width: 350px;padding: 3px;border: 1px solid #DDDDDD;"></div><br /></li>';
$('#swfu_images').append(template);
}
this.addPhoto = function(response) {
$('#photoset_photo_empty').remove();
if (!response.bStateError) {
template = '<li id="photo_'+response.id+'"><img src="'+response.file+'" alt="image" />'
+'<textarea onBlur="ls.photoset.setPreviewDescription('+response.id+', this.value)"></textarea><br />'
+'<a href="javascript:ls.photoset.deletePhoto('+response.id+')" class="image-delete">'+ls.lang.get('topic_photoset_photo_delete')+'</a>'
+'<span id="photo_preview_state_'+response.id+'" class="photo-preview-state"><a href="javascript:ls.photoset.setPreview('+response.id+')" class="mark-as-preview">'+ls.lang.get('topic_photoset_mark_as_preview')+'</a></span></li>';
$('#swfu_images').append(template);
ls.msg.notice(response.sMsgTitle,response.sMsg);
} else {
ls.msg.error(response.sMsgTitle,response.sMsg);
}
ls.photoset.closeForm();
}
this.deletePhoto = function(id)
{
if (!confirm(ls.lang.get('topic_photoset_photo_delete_confirm'))) {return;}
ls.ajax(aRouter['photoset']+'deleteimage', {'id':id}, function(response){
if (!response.bStateError) {
$('#photo_'+id).remove();
ls.msg.notice(response.sMsgTitle,response.sMsg);
} else {
ls.msg.error(response.sMsgTitle,response.sMsg);
}
});
}
this.setPreview =function(id)
{
$('#topic_main_photo').val(id);
$('.marked-as-preview').each(function (index, el) {
$(el).removeClass('marked-as-preview');
tmpId = $(el).attr('id').slice($(el).attr('id').lastIndexOf('_')+1);
$('#photo_preview_state_'+tmpId).html('<a href="javascript:ls.photoset.setPreview('+tmpId+')" class="mark-as-preview">'+ls.lang.get('topic_photoset_mark_as_preview')+'</a>');
});
$('#photo_'+id).addClass('marked-as-preview');
$('#photo_preview_state_'+id).html(ls.lang.get('topic_photoset_is_preview'));
}
this.setPreviewDescription = function(id, text)
{
ls.ajax(aRouter['photoset']+'setimagedescription', {'id':id, 'text':text}, function(result){
if (!result.bStateError) {
} else {
ls.msg.error('Error','Please try again later');
}
}
)
}
this.getMore = function(topic_id)
{
if (this.isLoading) return;
this.isLoading=true;
ls.ajax(aRouter['photoset']+'getmore', {'topic_id':topic_id, 'last_id':this.idLast}, function(result){
this.isLoading=false;
if (!result.bStateError) {
if (result.photos) {
$.each(result.photos, function(index, photo) {
var image = '<li><a class="photoset-image" href="'+photo.path+'" rel="[photoset]" title="'+photo.description+'"><img src="'+photo.path_thumb+'" alt="'+photo.description+'" /></a></li>';
$('#topic-photo-images').append(image);
this.idLast=photo.id;
$('.photoset-image').unbind('click');
$('.photoset-image').prettyPhoto({
social_tools:'',
show_title: false,
slideshow:false,
deeplinking: false
});
}.bind(this));
}
if (!result.bHaveNext || !result.photos) {
$('#topic-photo-more').remove();
}
} else {
ls.msg.error('Error','Please try again later');
}
}.bind(this));
}
this.upload = function()
{
ls.photoset.addPhotoEmpty();
ls.ajaxSubmit(aRouter['photoset']+'upload/',$('#photoset-upload-form'),function(data){
if (data.bStateError) {
$('#photoset_photo_empty').remove();
ls.msg.error(data.sMsgTitle,data.sMsg);
} else {
ls.photoset.addPhoto(data);
}
});
ls.photoset.closeForm();
}
this.closeForm = function()
{
$('#photoset-upload-form').jqmHide();
}
this.showForm = function()
{
var $select = $('#photoset-start-upload');
if ($select.length) {
var pos = $select.offset();
w = $select.outerWidth();
h = $select.outerHeight();
t = pos.top + h - 30 + 'px';
l = pos.left - 15 + 'px';
$('#photoset-upload-form').css({'top':t,'left':l});
}
$('#photoset-upload-form').show();
}
this.showMainPhoto = function(id) {
$('#photoset-main-preview-'+id).css('width',$('#photoset-main-image-'+id).outerWidth());
$('#photoset-photo-count-'+id).show();
$('#photoset-photo-desc-'+id).show();
}
return this;
}).call(ls.photoset || {},jQuery);
Upvotes: 1
Views: 353
Reputation: 143896
Ajax photo gallery is making some additions with hash # to the URL like
URL/#photoset_photo_empty_progress
. I can't understand what htaccess blocks or does to hash string. But it screws this and gallery stops to work.
The #
is part of a URL fragment which is used by the browser to determine how it should be handling the content. It's used for named anchors that tells the browser to scroll to a particular part of the page, as well as being used by javascript (on the browser/client). The fragment is never sent to the server in a request. The server never sees the fragment at all, it's specific to only the client.
If you send to a webserver the request: http://myserver.com/index.php#site-map
, the only thing the server sees in the request is GET /index.php HTTP/1.1
. No #site-map
. Because of this, your redirect essentially removes the fragment that was placed there by javascript. There's no way around it via the server, since it has no clue if there is or isn't a fragment held by the browser.
Possible work-arounds:
Upvotes: 2